精华内容
下载资源
问答
  • 分布式关系数据库中间件,类似cobar,mycat等中间件
  • 什么是分布式数据库中间件 更新时间:2020/06/10 GMT+08:00 查看PDF 分享 分布式数据库中间件(Distributed Database Middleware,简称DDM),是一款分布式关系型数据库,采用先进的存储计算分离架构,实现并发...

    什么是分布式数据库中间件

    更新时间: 2020/06/10 GMT+08:00

    查看PDF

    分享

    分布式数据库中间件(Distributed Database Middleware,简称DDM),是一款分布式关系型数据库,采用先进的存储计算分离架构,实现并发、计算、数据存储三个方面均可线性扩展。专注于解决数据库分布式扩展问题,突破了传统数据库的容量和性能瓶颈,实现海量数据高并发访问,其核心的优势是提供数据库水平扩展能力。

    实现原理

    DDM在并发、计算、数据存储三个方面的可扩展性,打破业务发展中因数据库扩展性及运维压力所产生的困扰。

    图1 DDM实现原理

    • 通过增加DDM实例节点和RDS for MySQL实例数量达到水平扩展效果。
    • 推荐从弹性云服务器(Elastic Cloud Server,简称ECS)访问分布式数据库中间件,为保障安全性,二者须在同一虚拟私有云(Virtual Private Cloud,简称VPC)中。

     

    展开全文
  • Sharding-JDBC是一个开源的分布式数据库中间件解决方案。它在Java的JDBC层以对业务应用零侵入的方式额外提供数据分片,读写分离,柔性事务和分布式治理能力。
  • 分布式数据库中间件对比总结

    万次阅读 2018-09-12 13:56:11
    分布式数据库中间件对比总结(1) 目前数据库中间件有很多,基本这些中间件在下都有了解使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。 1. 什么是...

    摘要:目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。

     

    分布式数据库中间件对比总结(1)

    目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。

    1. 什么是中间件

    传统的架构模式就是 应用连接数据库直接对数据进行访问,这种架构特点就是简单方便。

    但是随着目前数据量不断的增大我们就遇到了问题:

    • 单个表数据量太大
    • 单个库数据量太大
    • 单台数据量服务器压力很大
    • 读写速度遇到瓶颈

    当面临以上问题时,我们会想到的第一种解决方式就是 向上扩展(scale up) 简单来说就是不断增加硬件性能。这种方式只能暂时解决问题,当业务量不断增长时还是解决不了问题。特别是淘宝,facebook,youtube这种业务成线性,甚至指数级上升的情况

    此时我们不得不依赖于第二种方式: 水平扩展 。 直接增加机器,把数据库放到不同服务器上,在应用到数据库之间加一个proxy进行路由,这样就可以解决上面的问题了。

    2. 中间件与读写分离

    很多人都会把中间件认为是读写分离,其实读写分离只是中间件可以提供的一种功能,最主要的功能还是在于他可以 分库分表 ,下面是一个读写分离的示意图:

    分布式数据库中间件对比总结

    上面的图可以看出,红线代表写请求,绿线代表读请求。这就是一个简单的读写分离,下面我们在看看分库分表中间件。

    分布式数据库中间件对比总结

    上面这幅图就可以看出中间件作用,比如下面的这个SQL:

    select * from table_name where id = 1;

    按照中间件分库分表算法,此SQL将发送到DB1节点,由DB1这个MySQL负责解析和获取id=1的数据,并通过中间件返回给客户端。而在读写分离结构中并没有这些分库分表规则, 他只能在众多读节点中load balance随机进行分发,它要求各个节点都要存放一份完整的数据。

    3.各类中间件比较

    目前市面上中间件种类很多种 先看下各种中间件背景:

    分布式数据库中间件对比总结

    Cobar:

    阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。

    MyCAT:

    社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,

    OneProxy:

    数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。

    Vitess:

    这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。

    Kingshard:

    Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。

    Atlas:

    360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。

    MaxScale与MySQL Route:

    这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。

    MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。

    这两个中间件后面也会跟进测试下,看下效果如何。

    4. 结语

    这里主要是简单介绍了下各种中间件由来和特点,后面文章会陆续介绍各个中间件更详细的特性,优缺点,性能测试结果

    展开全文
  • 分布式数据库中间件对比总结2016年08月28日 11:19:22阅读数:11082摘要:目前数据库中间件有很多,基本这些中间件在下都有了解使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,...


    分布式数据库中间件对比总结

    摘要:目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。

     

    分布式数据库中间件对比总结(1)

    目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。

    1. 什么是中间件

    传统的架构模式就是 应用连接数据库直接对数据进行访问,这种架构特点就是简单方便。

    但是随着目前数据量不断的增大我们就遇到了问题:

    • 单个表数据量太大
    • 单个库数据量太大
    • 单台数据量服务器压力很大
    • 读写速度遇到瓶颈

    当面临以上问题时,我们会想到的第一种解决方式就是 向上扩展(scale up) 简单来说就是不断增加硬件性能。这种方式只能暂时解决问题,当业务量不断增长时还是解决不了问题。特别是淘宝,facebook,youtube这种业务成线性,甚至指数级上升的情况

    此时我们不得不依赖于第二种方式: 水平扩展 。 直接增加机器,把数据库放到不同服务器上,在应用到数据库之间加一个proxy进行路由,这样就可以解决上面的问题了。

    2. 中间件与读写分离

    很多人都会把中间件认为是读写分离,其实读写分离只是中间件可以提供的一种功能,最主要的功能还是在于他可以 分库分表 ,下面是一个读写分离的示意图:

    分布式数据库中间件对比总结

    上面的图可以看出,红线代表写请求,绿线代表读请求。这就是一个简单的读写分离,下面我们在看看分库分表中间件。

    分布式数据库中间件对比总结

    上面这幅图就可以看出中间件作用,比如下面的这个SQL:

    select * from table_name where id = 1;

    按照中间件分库分表算法,此SQL将发送到DB1节点,由DB1这个MySQL负责解析和获取id=1的数据,并通过中间件返回给客户端。而在读写分离结构中并没有这些分库分表规则, 他只能在众多读节点中load balance随机进行分发,它要求各个节点都要存放一份完整的数据。

    3.各类中间件比较

    目前市面上中间件种类很多种 先看下各种中间件背景:

    分布式数据库中间件对比总结

    Cobar:

    阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。

    MyCAT:

    社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,

    OneProxy:

    数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。

    Vitess:

    这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。

    Kingshard:

    Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。

    Atlas:

    360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。

    MaxScale与MySQL Route:

    这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。

    MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。

    这两个中间件后面也会跟进测试下,看下效果如何。

    4. 结语

    这里主要是简单介绍了下各种中间件由来和特点,后面文章会陆续介绍各个中间件更详细的特性,优缺点,性能测试结果

    原文:https://blog.csdn.net/kingice1014/article/details/52344297




    数据库(分库分表)中间件对比

    分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。

    根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表呢,还是一张表。分区可以把表分到不同的硬盘上,但不能分配到不同服务器上。

    • 优点:数据不存在多个副本,不必进行数据复制,性能更高。
    • 缺点:分区策略必须经过充分考虑,避免多个分区之间的数据存在关联关系,每个分区都是单点,如果某个分区宕机,就会影响到系统的使用。

     

    分片:对业务透明,在物理实现上分成多个服务器,不同的分片在不同服务器上

    个人感觉跟分库没啥区别,只是叫法不一样而已,值得一提的是关系型数据库和nosql数据库分片的概念以及处理方式是一样的吗?

    请各位看官自行查找相关资料予以解答

     

    分表:当数据量大到一定程度的时候,都会导致处理性能的不足,这个时候就没有办法了,只能进行分表处理。也就是把数据库当中数据根据按照分库原则分到多个数据表当中,

    这样,就可以把大表变成多个小表,不同的分表中数据不重复,从而提高处理效率。

    分表也有两种方案:

    1. 同库分表:所有的分表都在一个数据库中,由于数据库中表名不能重复,因此需要把数据表名起成不同的名字。

    • 优点:由于都在一个数据库中,公共表,不必进行复制,处理更简单
    • 缺点:由于还在一个数据库中,CPU、内存、文件IO、网络IO等瓶颈还是无法解决,只能降低单表中的数据记录数。

          表名不一致,会导后续的处理复杂(参照mysql meage存储引擎来处理)

    2. 不同库分表:由于分表在不同的数据库中,这个时候就可以使用同样的表名。

    • 优点:CPU、内存、文件IO、网络IO等瓶颈可以得到有效解决,表名相同,处理起来相对简单
    • 缺点:公共表由于在所有的分表都要使用,因此要进行复制、同步。

        一些聚合的操作,join,group by,order等难以顺利进行

    参考博客:http://www.cnblogs.com/langtianya/p/4997768.html,http://blog.51yip.com/mysql/949.html

     

    分库:分表和分区都是基于同一个数据库里的数据分离技巧,对数据库性能有一定提升,但是随着业务数据量的增加,

    原来所有的数据都是在一个数据库上的,网络IO及文件IO都集中在一个数据库上的,因此CPU、内存、文件IO、网络IO都可能会成为系统瓶颈。

    当业务系统的数据容量接近或超过单台服务器的容量、QPS/TPS接近或超过单个数据库实例的处理极限等

    此时,往往是采用垂直和水平结合的数据拆分方法,把数据服务和数据存储分布到多台数据库服务器上。

    分库只是一个通俗说法,更标准名称是数据分片,采用类似分布式数据库理论指导的方法实现,对应用程序达到数据服务的全透明和数据存储的全透明

     

    读写分离方案

    海量数据的存储及访问,通过对数据库进行读写分离,来提升数据的处理能力。读写分离它的方案特点是数据库产生多个副本,

    数据库的写操作都集中到一个数据库上,而一些读的操作呢,可以分解到其它数据库上。这样,只要付出数据复制的成本,

    就可以使得数据库的处理压力分解到多个数据库上,从而大大提升数据处理能力。

     

     

     

     

    1>Cobar 是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

    Cobar以Proxy的形式位于前台应用和实际数据库之间,对前台的开放的接口是MySQL通信协议,将前台SQL语句变更并按照数据分布规则发到合适的后台数据分库,再合并返回结果,模拟单库下的数据库行为。

    Cobar属于中间层方案,在应用程序和MySQL之间搭建一层Proxy。中间层介于应用程序与数据库间,需要做一次转发,而基于JDBC协议并无额外转发,直接由应用程序连接数据库,

    性能上有些许优势。这里并非说明中间层一定不如客户端直连,除了性能,需要考虑的因素还有很多,中间层更便于实现监控、数据迁移、连接管理等功能。

    Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。

    由于Cobar发起人的离职,Cobar停止维护。后续的类似中间件,比如MyCAT建立于Cobar之上,包括现在阿里服役的RDRS其中也复用了Cobar-Proxy的相关代码。

     

    2>MyCAT是社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,

    目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,发展到目前的版本,已经不是一个单纯的MySQL代理了,

    它的后端可以支持MySQL, SQL Server, Oracle, DB2, PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。

    MyCAT是一个强大的数据库中间件,不仅仅可以用作读写分离,以及分表分库、容灾管理,而且可以用于多租户应用开发、云平台基础设施,让你的架构具备很强的适应性和灵活性,

    借助于即将发布的MyCAT只能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表隐射到不同存储引擎上,而整个应用的代码一行也不用改变。

    MyCAT是在Cobar基础上发展的版本,两个显著提高:后端由BIO改为NIO,并发量有大幅提高; 增加了对Order By, Group By, Limit等聚合功能

    (虽然Cobar也可以支持Order By, Group By, Limit语法,但是结果没有进行聚合,只是简单返回给前端,聚合功能还是需要业务系统自己完成)

     

    3>TDDL是Tabao根据自己的业务特点开发了(Tabao Distributed Data Layer, 外号:头都大了)。主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,

    它是一个基于集中式配置的jdbc datasourcce实现,具有主备,读写分离,动态数据库配置等功能。

    TDDL并非独立的中间件,只能算作中间层,处于业务层和JDBC层中间,是以Jar包方式提供给应用调用,属于JDBC Shard的思想。

    TDDL源码:https://github.com/alibaba/tb_tddl 
    TDDL复杂度相对较高。当前公布的文档较少,只开源动态数据源,分表分库部分还未开源,还需要依赖diamond,不推荐使用。

     

    4>DRDS是阿里巴巴自主研发的分布式数据库服务(此项目不开源),DRDS脱胎于阿里巴巴开源的Cobar分布式数据库引擎,吸收了Cobar核心的Cobar-Proxy源码

    实现了一套独立的类似MySQL-Proxy协议的解析端,能够对传入的SQL进行解析和处理,对应用程序屏蔽各种复杂的底层DB拓扑结构,获得单机数据库一样的使用体验,

    同时借鉴了淘宝TDDL丰富的分布式数据库实践经验,实现了对分布式Join支持,SUM/MAX/COUNT/AVG等聚合函数支持以及排序等函数支持,

    通过异构索引、小表广播等解决分布式数据库使用场景下衍生出的一系列问题,最终形成了完整的分布式数据库方案。

     

    5>Atlas是一个位于应用程序与MySQL之间的基于MySQL协议的数据中间层项目,它是在mysql-proxy 0.8.2版本上对其进行优化,360团队基于mysql proxy 把lua用C改写,

    它实现了MySQL的客户端和服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节。

    Altas不能实现分布式分表,所有的字表必须在同一台DB的同一个DataBase里且所有的字表必须实现建好,Altas没有自动建表的功能。

    原有版本是不支持分库分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。

     

    6>DBProxy是美团点评DBA团队针对公司内部需求,在奇虎360公司开源的Atlas做了很多改进工作,形成了新的高可靠、高可用企业级数据库中间件

    其特性主要有:读写分离、负载均衡、支持分表、IP过滤、sql语句黑名单、DBA平滑下线DB、从库流量配置、动态加载配置项

    项目的Github地址是https://github.com/Meituan-Dianping/DBProxy

     

    7>sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据库分库分表访问。

    Sharding-JDBC是继dubbox和elastic-job之后,ddframe系列开源的第3个项目。

    Sharding-JDBC直接封装JDBC API,可以理解为增强版的JDBC驱动,旧代码迁移成本几乎为零:

    • 可适用于任何基于Java的ORM框架,如JPA、Hibernate、Mybatis、Spring JDBC Template或直接使用JDBC。
    • 可基于任何第三方的数据库连接池,如DBCP、C3P0、 BoneCP、Druid等。
    • 理论上可支持任意实现JDBC规范的数据库。虽然目前仅支持MySQL,但已有支持Oracle、SQLServer等数据库的计划。

    Sharding-JDBC定位为轻量Java框架,使用客户端直连数据库,以jar包形式提供服务,无proxy代理层,无需额外部署,无其他依赖,DBA也无需改变原有的运维方式。

    Sharding-JDBC分片策略灵活,可支持等号、between、in等多维度分片,也可支持多分片键。

    SQL解析功能完善,支持聚合、分组、排序、limit、or等查询,并支持Binding Table以及笛卡尔积表查询。

     

     

    知名度较低的:

    Heisenberg

    Baidu.
    其优点:分库分表与应用脱离,分库表如同使用单库表一样,减少db连接数压力,热重启配置,可水平扩容,遵守MySQL原生协议,读写分离,无语言限制,

    mysqlclient, c, java都可以使用Heisenberg服务器通过管理命令可以查看,如连接数,线程池,结点等,并可以调整采用velocity的分库分表脚本进行自定义分库表,相当的灵活。

    https://github.com/brucexx/heisenberg(开源版已停止维护)

    CDS

    JD. Completed Database Sharding.
    CDS是一款基于客户端开发的分库分表中间件产品,实现了JDBC标准API,支持分库分表,读写分离和数据运维等诸多共,提供高性能,高并发和高可靠的海量数据路由存取服务,

    业务系统可近乎零成本进行介入,目前支持MySQL, Oracle和SQL Server.
    (架构上和Cobar,MyCAT相似,直接采用jdbc对接,没有实现类似MySQL协议,没有NIO,AIO,SQL Parser模块采用JSqlParser, Sql解析器有:druid>JSqlParser>fdbparser.)

    DDB

    网易. Distributed DataBase.
    DDB经历了三次服务模式的重大更迭:Driver模式->Proxy模式->云模式。

    Driver模式:基于JDBC驱动访问,提供一个db.jar, 和TDDL类似, 位于应用层和JDBC之间. Proxy模式:在DDB中搭建了一组代理服务器来提供标准的MySQL服务,

    在代理服务器内部实现分库分表的逻辑。应用通过标准数据库驱动访问DDB Proxy, Proxy内部通过MySQL解码器将请求还原为SQL, 并由DDB Driver执行得到结果。

    私有云模式:基于网易私有云开发的一套平台化管理工具Cloudadmin, 将DDB原先Master的功能打散,一部分分库相关功能集成到proxy中,

    如分库管理、表管理、用户管理等,一部分中心化功能集成到Cloudadmin中,如报警监控,此外,Cloudadmin中提供了一键部署、自动和手动备份,版本管理等平台化功能。

     

    OneProxy:

    数据库界大牛,前支付宝数据库团队领导楼方鑫开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,

    专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。

    Oceanus(58同城数据库中间件)

    Oceanus致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的解决方案,甚至是平台化系统。拥抱开源,提供各类插件机制集成其他开源项目,

    新手可以在几分钟内上手编程,分库分表逻辑不再与业务紧密耦合,扩容有标准模式,减少意外错误的发生。

     

    Vitess:

    这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。

    Kingshard:

    Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。

    MaxScale与MySQL Route:

    这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。

    MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。

    作者: leon66666
    转载:https://www.cnblogs.com/wangzhongqiu/p/7100332.html



    mysql中间件研究(Atlas,cobar,TDDL)

    mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。

    Atlas

    Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。
    Altas架构:
    Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

    以下是一个可以参考的整体架构,LVS前端做负载均衡,两个Altas做HA,防止单点故障。

    Altas的一些新特性:
    1.主库宕机不影响读
    主库宕机,Atlas自动将宕机的主库摘除,写操作会失败,读操作不受影响。从库宕机,Atlas自动将宕机的从库摘除,对应用没有影响。在mysql官方的proxy中主库宕机,从库亦不可用。
    2.通过管理接口,简化管理工作,DB的上下线对应用完全透明,同时可以手动上下线。
    图1是手动添加一台从库的示例。
    图1

    3.自己实现读写分离
    (1)为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加 /*master*/ 就可以将读请求强制发往主库。
    (2)如图2中,主库可设置多项,用逗号分隔,从库可设置多项和权重,达到负载均衡。
    图2

    4.自己实现分表(图3)
    (1)需带有分表字段。
    (2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE语句。
    (3)支持多个子表查询结果的合并和排序。
    图3 

    这里不得不吐槽Atlas的分表功能,不能实现分布式分表,所有的子表必须在同一台DB的同一个database里且所有的子表必须事先建好,Atlas没有自动建表的功能。
    5.之前官方主要功能逻辑由使用lua脚本编写,效率低,Atlas用C改写,QPS提高,latency降低。
    6.安全方面的提升
    (1)通过配置文件中的pwds参数进行连接Atlas的用户的权限控制。
    (2)通过client-ips参数对有权限连接Atlas的ip进行过滤。
    (3)日志中记录所有通过Altas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行成功与否、执行所耗费的时间 ,如下面例子(图4)。
    图4

    7.平滑重启
    通过配置文件中设置lvs-ips参数实现平滑重启功能,否则重启Altas的瞬间那些SQL请求都会失败。该参数前面挂接的lvs的物理网卡的ip,注意不是虚ip。平滑重启的条件是至少有两台配置相同的Atlas且挂在lvs之后。
    source:https://github.com/Qihoo360/Atlas

    alibaba.cobar

    Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。那么具体说说我们为什么要用它,或说cobar--能干什么?以下是我们业务运行中会存在的一些问题:
    1.随着业务的进行数据库的数据量和访问量的剧增,需要对数据进行水平拆分来降低单库的压力,而且需要高效且相对透明的来屏蔽掉水平拆分的细节。
    2.为提高访问的可用性,数据源需要备份。
    3.数据源可用性的检测和failover。
    4.前台的高并发造成后台数据库连接数过多,降低了性能,怎么解决。 
    针对以上问题就有了cobar施展自己的空间了,cobar中间件以proxy的形式位于前台应用和实际数据库之间,对前台的开放的接口是mysql通信协议。将前台SQL语句变更并按照数据分布规则转发到合适的后台数据分库,再合并返回结果,模拟单库下的数据库行为。 

    Cobar应用举例
    应用架构:

    应用介绍:
    1.通过Cobar提供一个名为test的数据库,其中包含t1,t2两张表。后台有3个MySQL实例(ip:port)为其提供服务,分别为:A,B,C。
    2.期望t1表的数据放置在实例A中,t2表的数据水平拆成四份并在实例B和C中各自放两份。t2表的数据要具备HA功能,即B或者C实例其中一个出现故障,不影响使用且可提供完整的数据服务。
    cabar优点总结:
    1.数据和访问从集中式改变为分布:
    (1)Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
    (2)Cobar也支持将不同的表放入不同的库
    (3) 多数情况下,用户会将以上两种方式混合使用
    注意!:Cobar不支持将一张表,例如test表拆分成test_1,test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。
    2.解决连接数过大的问题。
    3.对业务代码侵入性少。
    4.提供数据节点的failover,HA:
    (1)Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
    (2)Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步。
    cobar缺点:
    开源版本中数据库只支持mysql,并且不支持读写分离。
    source:http://code.alibabatech.com/wiki/display/cobar/Home

    TDDL

    淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。
    TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中):

    淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作一个数据库一样操作多个库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是分成2个、4个、8个、16个、32个……直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询在几毫秒内完成),TDDL就承担了这样一个工作。在外面有些系统也用DAL(数据访问层) 这个概念来命名这个中间件。
    下图展示了一个简单的分库分表数据查询策略:

    主要优点:
    1.数据库主备和动态切换
    2.带权重的读写分离
    3.单线程读重试
    4.集中式数据源信息管理和动态变更
    5.剥离的稳定jboss数据源
    6.支持mysql和oracle数据库
    7.基于jdbc规范,很容易扩展支持实现jdbc规范的数据源
    8.无server,client-jar形式存在,应用直连数据库
    9.读写次数,并发度流程控制,动态变更
    10.可分析的日志打印,日志流控,动态变更
    TDDL必须要依赖diamond配置中心(diamond是淘宝内部使用的一个管理持久配置的系统,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理,同时diamond也已开源)。
    TDDL动态数据源使用示例说明:http://rdc.taobao.com/team/jm/archives/1645
    diamond简介和快速使用:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/
    TDDL源码:https://github.com/alibaba/tb_tddl 
    TDDL复杂度相对较高。当前公布的文档较少,只开源动态数据源,分表分库部分还未开源,还需要依赖diamond,不推荐使用。
    终其所有,我们研究中间件的目的是使数据库实现性能的提高。具体使用哪种还要经过深入的研究,严谨的测试才可决定。

    原文:https://www.guokr.com/blog/475765/







    展开全文
  • 分布式数据库中间件分布式情况下随着用户量的增加,Mysql数据库表逐渐庞大随之而来的问题就是导致数据库性能的下降,当数据量超过500W行那么就可以考虑分库分表了 分库分表概述 什么是分库分表 分库分表,相信...

    分布式数据库中间件

    在分布式情况下随着用户量的增加,Mysql数据库表逐渐庞大随之而来的问题就是导致数据库性能的下降,当数据量超过500W行那么就可以考虑分库分表了

    分库分表概述

    什么是分库分表

    分库分表,相信大家在编写Web项目的时都会使用到关系型数据库,通常在传统的Web项目中我们一个项目只会对应一个数据库,当对于类似电商这些用户量与数据量大的项目通常使用单个数据库是无法支撑的,所以就有了分库分表,即把项目中的表按不同的业务分别存放到不同的数据库中、或把一张表数据拆分到不同的数据库中

    为什么要分库分表

    分库分表是当前关系型数据库最后的优化手段了,简称杀手锏,所以在分库分表前必定会经历一些数据库优化过程,大概演变如下

    单表数据超出数据库支持的容量=>更换数据库+缓存=>SQL优化、索引优化、字段优化=>读写分离=>分库分表

    分库分表的常见方法

    分库分表常见方法分2种:垂直拆分,水平拆分

    垂直拆分

    垂直拆分,即将数据库中的多个表分别拆分到不同的数据库中,或者将字段较多的单个表拆分为2个表分别存放到不同的库中

    在这里插入图片描述

    垂直拆分特点

    垂直拆分也叫字段拆分,即将表按字段拆分成多个表,所以垂直拆分有以下特点

    1. 拆分后表行数并未得到改变,表列数会有所减少
    2. 拆分后业务清晰,专库专用
    3. 实现动静态分析,冷热数据分离,说明:冷数据(很少修的数据):如你发的朋友圈内容,热数据(改动频繁数据):如你朋友圈的评论
    4. 数据库性能受业务影响,如订单表的数据库性能在双11情况用户大量操作订单会扛不住,然而会员表数据库性能则可以保存一个良好的状态
    5. 由于业务分布在不同的数据库下,对于一些跨业务关联join查询无法使用sql语句实现,只能通过java程序接口调用组合完成

    水平拆分

    垂直拆分,即将数据库中一个表的数据分别拆分到不同的数据库中

    在这里插入图片描述

    水平拆分特点

    水平拆分也叫横向拆分,即负责多个相同结构的表,使用某种算法让数据平均分布在这些表中

    1. 拆分后表结构未得到改变,单表行数会得到相应的减少,有助于性能的提示
    2. 由于数据都被分散到多个表中,提高系统的稳定性和负载能力
    3. 拆分规则很难抽象,如所以需要使用某种算法使得同一个用户的数据只会一直被保存到同一个库中
    4. 数据扩容难度大,由于增加库于表后会导致原有的拆分规则有变动
    5. 分片事务的一致性的问题,部分业务也是关联join查询无法使用sql语句实现,只能通过java程序接口调用组合完成

    垂直+水平拆分

    上面已经介绍了垂直拆分于水平拆分了,那么在实际开发过程中使用那种是最好的呢,小孩子才做选择好吧在实际开发过程中2种结合一起使用

    1. 首先在数据库设计阶段是就要考虑垂直分库和垂直分表
    2. 随着数据库数据量的增加,不要立马考虑做水平切分,首先考虑缓存处理、读写分离,使用索引的方式尝试优化数据库,如果这些方式不能解决根本问题,再考虑做水平分库和水平分表

    在这里插入图片描述

    分库分表后带来的问题

    1. 读写分离引发的主从同步,数据一致性,网络延迟问题
    2. 多数据库多表导致维护成本的增加
    3. 分布式事务
    4. 跨库jion查询
    5. 分布式全局唯一ID(雪花算法)
    6. 多数据源管理问题

    分库分表常见算法

    分库分表算法常用于水平拆分,即按照一定规则使得某一个用户有史至终只会对同一个表进行操作

    取模(Hash):通过userid进行取模运算,使得数据分散均衡,当然如果需要扩容后所有的数据都需要进行重新Hash,一致性Hash可以缓解该问题,但不能完全解决

    范围分区(range):按日期、按地区去拆分数据

    预定义(list):对数据量预估,并且创建好相应的数据于库

    分库分表解决方案

    经过对分库分表后,可以发现分库分表将会带来很多的问题那么该如何解决呢

    通常有2种实现方案:Proxy代理与Jdbc直连

    Proxy代理

    Proxy代理,顾名思义即Web应用将所有的增删改查sql发送到给一个代理服务,代理服务去数据库完成相应的操作后再返回给Web应用

    在这里插入图片描述

    Jdbc直连

    Jdbc直连,增强JDBC包,对所有的数据库操作语句按照特定的要求分发到不同的库中

    在这里插入图片描述

    ShardingSphere

    Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

    模式区别

    ShardingSphere同时提供了3种分布式数据库中间件解决方案:JDBC、Proxy、Sidecar(占不成熟)

    在这里插入图片描述

    快速上手

    Sharding-JDBC实战(水平分表、水平分库、垂直分表、公共表、读写分离)

    水平分库、垂直分表、公共表、读写分离)](https://blog.csdn.net/weixin_44642403/article/details/119988003?spm=1001.2014.3001.5501)

    Sharding-Proxy实战(水平分表、水平分库、垂直分表、读写分离)

    展开全文
  • 由Sharding-JDBC,Sharding-Sphere-分布式数据库中间件Ecosphere文档概述Sharding-Sphere是一个开源的分布式数据库中间件解决方案套件,由Sharding-JDBC,Sharding-ProxySharding-Sidecar组成。 这三个子项目适用...
  • amp;from=timeline&isappinstalled=0&from=singlemessage ... 研究领域为数据库技术和分布式系统,主持过国家自然科学基金项目多项企业合作项目,发表研究论文30多篇,曾参与交...
  • 分布式存储系统数据库中间件-Mycat ... Mycat基本定义 一个彻底开源的,面向企业应用开发的大...结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品 常用应用场景 单纯
  • 全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...
  • 之后在导师的指导下,由孵化器管理委员会成员进行经营孵化,在2020年3月28日在Apache孵化器以10 票支持一次性通过毕业提案投票。4月15日,Apache董事会通过ShardingSphere毕业决议,结束了为期17...
  • 分布式数据库中间件(Distributed Database Middleware,简称DDM),专注于解决数据库分布式扩展问题,一个实现了Mysql协议栈的数据库代理服务器,通过代理服务器将底层数据库存储引擎以集群方式管理起来。...
  • DruidParserFactory parseTables 获取数据库所在表名集合   DruidSelectOracleParser Oracle分页解析。   转载于:https://my.oschina.net/fxdemon/blog/1142830
  • 分布式数据库中间件—TDDL

    千次阅读 2018-06-05 21:15:20
    项目中一直在用着TDDL,但除了接入时简单了解了下他的用法原理外,也没有过多的深究其背后的实现,毕竟在阿里内部用到的中间件太多,每一个都深入的学习需要的周期太长,再者项目中数据库层也没有用到分布式,没有...
  • 码农少闲月,五月人倍忙!Sharding-Sphere在经历公投改名、新官网上线、版权转移等一系列重大变革后,终于迎来了它的3.X新时代!从Sharding-JDBC到Sharding-Sphere,老铁粉陪它一同走过,新朋友也在陆续加入。...
  • mysql分布式数据库中间件对比

    千次阅读 2018-10-05 14:48:11
    https://blog.csdn.net/gb4215287/article/details/78599124 中间件Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件 https://blog.csdn.net/moakun/article/details/80076314 ...
  • 目录分布式数据库架构分布式数据库发展梗概关于数据库文件系统了解一下LSM-TreeB+Tree VS LSM-Tree第一代分布式数据库——分库分表及分布式中间件普通分布式中间件阿里OceanBase数据库第二代分布式数据库——NoSQL第...
  • 分布式数据库架构及企业实践--基于Mycat中间件
  • 这是华为云Paas推出的分布式数据库中间件,DDM(Distributed Database Middleware)是一个实现了Mysql协议栈的服务器,前端用户可以把它看做一个数据库代理,用Mysql客户端工具命令行访问,而DDM后端连接一到多个...
  • 数据库设计&分布式设计

    千次阅读 2019-08-25 01:47:39
    数据库设计1.1 多表关系 (重点)1.2 类型设计 (重点)1.3 约束设计 (重点)1.4 索引设计1.5 主键设计1.6 三范式反范式设计 (重点)1.7 锁1.8 事务1.9 数据库引擎 (重点)1.10 其他二. 数据库分布式设计2.1 复制2.2 ...
  • 分布式数据库和我们经常用的传统的关系型数据库有什么区别,比如oracle,mysql,sql server,首先看下定义: 分布式数据库定义:分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台...
  • 分布式数据库中间件 MyCat 搞起来!

    千次阅读 多人点赞 2019-06-28 08:53:01
    关于 MyCat 的铺垫文章已经写了三篇了: MySQL 只能做小项目?...前面文章我们提到,如果数据量比较大的话,我们需要对数据进行分库分表,分完之后,原本存在一个数据库中的数据,现在就存在多个数据库中了...
  • 什么是分布式数据库

    千次阅读 2021-08-04 09:07:43
    分布式数据库,从名字上可以拆解为:分布式+数据库。用一句话总结为:由多个独立实体组成,并且彼此通过网络进行互联的数据库。 理解新概念最好的方式就是通过已经掌握的知识来学习,下表对比了大家熟悉的分布式...
  • 基于MyCat实现的分布式使句酷架构及企业实践。主要讲述了利用MyCat实现数据库的分布式架构,MyCat是有中国人自主研发的数据库中间件,也是为数不多的有中国人自主研发的软件之一。
  • 全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。
  • 全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。《分布式...
  • #资源达人分享计划#

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,579
精华内容 39,831
关键字:

数据库中间件和分布式数据库