MySQL 中间件汇总比较

360 Atlas
较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目 。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性 。360内部使用 Atlas 运行的 MySQL 务,每天承载的读写请求数达几十亿条 。
主要功能:
1. 读写分离
2. 从库负载均衡
3. IP过滤
4. SQL语句黑白名单
5. 自动分表
Cobar (不维护了)
Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务 。
Cobar的分布式主要是通过将表放入不同的库来实现:
1. 支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
2. 支持将不同的表放入不同的库
3. 多数情况下,用户会将以上两种方式混合使用 。
这里需要强调的是,Cobar 不支持将一张表,例如test表拆分成test_1, test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式 。
在用户配置了 MySQL 心跳的情况下,Cobar 可以自动向后端连接的 MySQL 发送心跳,判断 MySQL 运行状况,一旦运行出现异常,Cobar 可以自动切换到备机工作 。
但需要强调的是:
1. Cobar 的主备切换有两种触发方式,一种是用户手动触发,一种是 Cobar 的心跳语句检测到异常后自动触发 。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常 。
2. Cobar 只检查 MySQL 主备异常,不关心主备之间的数据同步,因此用户需要在使用 Cobar 之前在 MySQL 主备上配置双向同步,详情可以参阅MySQL参考手册 。
其次,我们也需要注意Cobar的功能约束:
1. 不支持跨库情况下的join、分页、排序、子查询操作 。
2. SELECT 语句执行会被忽略,事务和字符集设置除外 。
3. 分库情况下,insert 语句必须包含拆分字段列名 。
4. 分库情况下,update 语句不能更新拆分字段的值 。
5. 不支持 SAVEPOINT 操作 。
6. 暂时只支持 MySQL数据节点 。
Mycat
前身 Cobar,开源,较为活跃 。
特点:
遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理 。
基于心跳的自动故障切换,支持读写分离,支持 MySQL 一双主多从,以及一主多从
有效管理数据源连接,基于数据分库,而不是分表的模式 。
基于 NIO 实现,有效管理线程,高并发问题 。
支持数据的多片自动路由与聚合,支持 sum , count , max 等常用的聚合函数 。
支持2表 join,甚至基于 caltlet 的多表 join 。
支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询 。
支持多租户方案 。
支持分布式事务(弱xa)
支持全局序列号,解决分布式下的主键生成问题 。
分片规则丰富,插件化开发,易于扩展 。
强大的 web,命令行监控 。
支持前端作为 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb 、巨杉 。
集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0开发版) 。
参考有道:MySQL 中间件 Mycat【Blog】.note ,Blog:MySQL 中间件 Mycat
TDDL
已经不再使用,下一代是 DDRS 。
淘宝根据自己的业务特点开发了 TDDL (Taobao Distributed Data Layer 外号:头都大了 )框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource 实现,具有主备,读写分离,动态数据库配置等功能 。
TDDL 通过部署在客户端的 jar 包,将用户的 SQL 路由到指定的数据库中 。
功能:
数据库主备和动态切换
带权重的读写分离
单线程读重试
集中式数据源信息管理和动态变更
剥离的稳定 jboss 数据源
支持 MySQL 和 Oracle 数据库
基于 JDBC 规范,很容易扩展支持实现 JDBC 规范的数据源
无 Server,Client,Jar 形式存在,应用直连数据库
读写次数,并发度流程控制,动态变更
可分析的日志打印,日志流控,动态变更
Heisenberg
整合 Cobar、TDDL,目前并不活跃,由百度员工个人编写 。
功能:
分库分表与应用脱离,分库表如同使用单库表一样
减少 DB 连接数压力
热重启配置
可水平扩容
遵守 MySQL 原生协议


推荐阅读