0x01:TDDL(Taobao Distributed Data Layer)框架
淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。属于 client 层方案,支持基本的 crud 语法和读写分离,但不支持 join、多表查询等语法。目前使用的也不多,因为还依赖淘宝的 diamond 配置管理系统。
TDDL仓库:https://gitee.com/justwe9891/TDDL
diamond仓库:https://gitee.com/justwe9891/diamond
详细介绍TDDL这篇文章不错:https://www.cnblogs.com/adealjason/p/6364806.html
0x02:atlas
Atlas是由奇虎360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的client;在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的client和服务端协议,同一时候作为client与MySQL通讯。它相应用程序屏蔽了DB的细节,同一时候为了减少MySQL负担,它还维护了连接池。
仓库:https://github.com/Qihoo360/Atlas/releases
0x03:sharding-jdbc
Sharding-JDBC 是当当网开源的适用于微服务的分布式数据访问基础类库,完整的实现了分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。其定位为轻量级JAVA框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架
仓库:https://github.com/Apache/shardingsphere
0x04:MyCat
基于 cobar 改造的,属于 proxy 层方案,支持的功能非常完善,而且目前应该是非常火的而且不断流行的数据库中间件。MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度
仓库:https://github.com/MyCATApache/Mycat-Server
0x05:Cobar
Cobar是提供分布式数据库服务的中间件,由阿里巴巴中间件团队开发,是阿里巴巴B2B前台应用访问数据库的统一入口。Cobar的分布式方案是分库和分表,可以按照业务需求将数据库中耦合度较低的表分到不同的分库中,也可以按照具体表的增长速度和数据量水平切分到不同的分库中,Cobar可以实现应用层与物理分库的双向透明,从而实现应用程序访问分布式数据库与访问单库无差别。 Cobar还可以配合MySQL的心跳和binlog实现备机的自动切换,保证数据节点的可靠性,从而实现高可用性。
仓库:https://github.com/alibaba/cobar
0x06:heisenberg
heisenberg 是百度开源的一款基于MySQL协议之上的分库分表中间件服务器,支持各种灵活的分库分表规则,做到应用和分库分表相隔离,并且为mysql进行dbproxy,减少了db的连接IO压力,并且可做到读写分离以及replication的手工切换。
仓库:https://github.com/brucexx/heisenberg