mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,含清Atlas,明圆cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。AtlasAtlas是由 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的上下线对应用完全透明,同时可以手动上下线。3.自己实现读写分离(1)为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加 /*master*/ 就可以将读请求强制发往主库。主库可设置多项,用逗号分隔,从库可设置多项和权重,达到负载均衡。4.自己实现分表(1)需带有分表字段。(2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE语句。(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、执行成功与否、执行所耗费的时间 ,如下面例子。