前言

华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量、性能瓶颈和分布式扩展问题的中间件服务,提供分库分表、读写分离、弹性扩容等能力,应对海量数据的高并发访问场景,有效提升数据库读写性能。

图1:DDM产品介绍

DDM前世之:MyCAT

MyCAT的使用情况全国范围内粗略统计超过600家以上成功案例,涵盖政府、金融、证券、互联网、物联网、电信、游戏等众多行业。支持1000亿大数据,中国非常活跃的开源分布式数据库中间件。MyCAT成功在于背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA。

DDM与MyCAT的关系:DDM是基于MyCAT1.6.5版本增强而来。基于MyCAT增强的地方如下:

1、运维管理:DDM提供Console界面,可在线对DDM实例、逻辑库、逻辑表、拆分规则等进行管理和维护

2、集群高可用:DDM支持集群高可用,可实现跨AZ,RDS也支持跨AZ

3、安全增强:支持VPC(虚拟私有云)、子网、安全组,与其他租户网络隔离

4、质量保证:在质量方面补充了大量自动化测试用例(功能、性能),全方位进行质量保障措施

5、低成本:稳定的产品,完善的运维和技术支持,相比开源产品总体性价比更高;多种实例规格配置覆盖不同业务规模场景,按需购买

6、性能增强:DDM与直连MySQL相比性能损耗得到了大大的降低,并且Sysbench OLTP场景性能得到飞跃的提升,性能数据如表2所示:

表2:OLTP性能测试

7、平滑扩容:在数据库出现存储容量瓶颈时,DDM支持通过添加新的RDS实例对存储容量进行扩展,无容量上限,扩容无需应用改造,支持字符串、数字、日期等多种拆纬度,扩容进度支持可视化跟踪,并且平滑扩容业务不中断。平滑扩容原理如图3所示:

图3:平滑扩容原理

8、分布式事务:DDM当前支持单机、最大努力提交、最终一致性和强一致性四种分布式事务模型。弥补了开源MyCAT没有分布式事务的不足。如下针对DDM提供的分布式事务进行介绍

DDM事务模型

单机

只能在单个分片上执行,如果事务涉及到多分片,DDM将拒绝执行,返回错误。原理如图4所示。

图4:单机分布式事务

适用场景:适合业务拆分比较合理,在应用层有独自完善的事务处理框架,到DDM的事务都是单分片事务,单分片事务由底层数据库提供强一致性的保证。单机事务模型下,如果出现跨分片的事务,会报错进行提示,避免达不到预期目的。

最大努力提交

事务在各分片上分别提交,互不干涉,提交结果尽最大可能保持一致,但有部分提交成功部分提交失败的可能,原理如图5所示。

图5:最大努力提交事务模型

适用场景:这种分布式事务适合绝大部分不涉及金钱往来的业务,在性能和一致性之间比较好的一个平衡。事务中的commit往多个节点发送执行,有部分commit成功部分commit失败的可能性,但是这种情况出现的可能性比较低,只有在commit的时间窗内出现异常才有可能出现。

最终一致性

事务在各分片上的提交结果不保证始终一致,如果有分片提交失败,DDM会对其他提交成功的分片提供补偿机制撤消之前的修改,从而确保各分片事务状态最终一致。

说明:最终一致性与强一致性这两种分布式事务的原理基本一致,区别在于:

最终一致性场景下,如有并发的查询请求,查询到的结果可能不是最终状态,如部分分片已完成提交,部分分片还在提交中,即存在中间状态。

强一致性场景下,如有并发的查询请求,查询结果是事务提交完成后的结果,即不存在中间状态。

适用场景:适合对一致性要求比较高的场景,最终一致性解决了最大努力提交模型下部分commit成功部分失败的问题。如果对部分读的sql一致性要求比较高,还可以通过select for update或者lock in share mode来避免读取到不一致状态(部分成功部分失败)。

例如:

select col1, col2,...coln from table1 where col1={拆分键} for update;

select col1, col2,...coln from table1 where col1={拆分键} lock in share mode;

where条件中建议带上拆分键。

强一致性

在最终一致性基础上,增强了分布式事务始终一致性保证,即任何时间点,各分片的数据都是事务开始前或者事务提交后的。

适用场景

适合对事务一致性有极端要求的场景,既要保证提交原子性、并且所有查询都必须避免脏读。一致性级别越高,付出性能代价会越大,请根据业务需要选择合适的模型。

华为云分布式数据库中间件DDM不但针对MyCAT的功能进行增强和性能进行提高,而且把MyCAT存在的bug进行修复。DDM解决了单机关系型数据库对硬件依赖性强、扩展能力有限、数据量增大后扩容困难、数据库响应变慢等难题,通过分布式集群架构方案实现了“平滑扩容”,扩容过程中保持业务不中断。总的来说,分布式数据库中间件(DDM)具有扩容方便、性能卓越、简单易用、低成本和提供分布式事务等优势。

华为云分布式数据库中间件DDM和开源MyCAT对比的更多相关文章

  1. 分布式数据库中间件DDM的实现原理

    随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性.甚至指数级上升的情况.此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也就是我们说的数据库中间 ...

  2. 浅析分布式数据库中间件DDM

    前言 DDM是什么?这是华为云Paas推出的分布式数据库中间件,DDM(Distributed Database Middleware)是一个实现了Mysql协议栈的服务器,前端用户可以把它看做一个数 ...

  3. 华为云分布式缓存服务DCS与开源服务差异对比

    华为云分布式缓存DCS提供单机.主备.集群等丰富的实例类型,满足用户高读写性能及快速数据访问的业务诉求.支持丰富的实例管理操作,帮助用户省去运维烦恼.用户可以聚焦于业务逻辑本身,而无需过多考虑部署.监 ...

  4. 对话DDM:分布式数据库中间件全解析

    进入云计算时代,传统的数据库在性能和容量等方面已无法满足企业的要求,随着数据量的不断骤增,易于扩展.拆分的数据库解决方案对于企业的云化转型更是显得尤为重要.为使企业应用上云更简单,分布式数据库中间件D ...

  5. Apache ShardingSphere:由开源驱动的分布式数据库中间件生态

    2021 年 7 月 21 日 2021 亚马逊云科技中国峰会现场,SphereEx 联合创始人.Apache ShardingSphere PMC 潘娟受邀参与此次峰会,以<Apache Sh ...

  6. 开源分布式数据库中间件MyCat源码分析系列

    MyCat是当下很火的开源分布式数据库中间件,特意花费了一些精力研究其实现方式与内部机制,在此针对某些较为重要的源码进行粗浅的分析,希望与感兴趣的朋友交流探讨. 本源码分析系列主要针对代码实现,配置. ...

  7. 分布式数据库中间件、产品——sharding-jdbc、mycat、drds

    一般对于业务记录类随时间会不断增加的数据,当数据量增加到一定量(一般认为整型值为主的表达到千万级,字符串为主的表达到五百万)的时候,性能将遇到瓶颈,同时调整表结构也会变得非常困难.为了避免生产遇到这样 ...

  8. 分布式数据库中间件TDDL、Amoeba、Cobar、MyCAT架构比较分

    比较了业界流行的MySQL分布式数据库中间件,关于每个产品的介绍,网上的资料比较多,本文只是对几款产品的架构进行比较,从中可以看出中间件发展和演进路线 框架比较 TDDL Amoeba Cobar M ...

  9. 分布式数据库中间件Mycat百亿级数据存储(转)

    此文转自: https://www.jianshu.com/p/9f1347ef75dd 2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,如高并发下的假死,心跳连接的故障,只实现 ...

随机推荐

  1. CAD参数绘制对齐标注(com接口)

    主要用到函数说明: _DMxDrawX::DrawDimAligned 绘制一个对齐标注.详细说明如下: 参数 说明 DOUBLE dExtLine1PointX 第一条界线开始点X值 DOUBLE ...

  2. Parker Gear Pump - Gear Pump Seal Is More O-Ring: Role

    Parker Gear Pump    introduction Gear pump lip seal is mainly used in reciprocating dynamic seals. C ...

  3. Linux运维到底是做什么的?在开始学习之前,你必须了解这些!

    首先祝贺你选择学习Linux,你可能即将踏上Linux的工作之旅,出发之前,让我带你来看一看关于Linux和Linux运维的一切. Linux因其高效率.易于裁剪.应用广等优势,成为了当今中高端服务器 ...

  4. Python 面向对象 组合-多态与多态性-封装-property

    面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...

  5. laravel学习笔记2--表单

    一.Controller 1.Request 1.1.取值:input // 1.取值 echo $request->input('name'); // 2.取不到值时打印默认值 echo $r ...

  6. centos6基础优化

    一.关闭SELinux功能 selinux功能太严苛,还是关闭了吧 法一:修改配置文件,永久生效 [root@web01 ~]# sed -i 's/SELINUX=enforcing/SELINUX ...

  7. Python-基本图形绘制及库引用

    turtle库的使用 概述:turtle(海龟)库是turtle绘图体系的python实现 turtle库的理解: -有一只海龟,其实在窗体正中心,在画布上游走 -走过的轨迹形成了绘制的图形 -海龟由 ...

  8. http chunked 理解

    https://imququ.com/post/transfer-encoding-header-in-http.html #! /usr/bin/python #coding:utf8 import ...

  9. uva 12096 The SetStack Computer(STL set的各种库函数 交集 并集 插入迭代器)

    题意: 有5种操作: PUSH:加入“{}”空集合入栈. DUP:栈顶元素再入栈. UNION:出栈两个集合,取并集入栈. INTERSECT:出栈两个集合,取交集入栈. ADD:出栈两个集合,将先出 ...

  10. safepoint与UseCountedLoopSafepoints

    safepoint: JIT编码时,会在代码中所有方法的返回之前,以及所有非counted loop的循环(无界循环)回跳之前放置一个safepoint(counted loop则没有放置safepo ...