Atlas
Atlas 是基于 MySQL 协议的数据中间层项目,由奇虎 360 开发维护。它在 MySQL-Proxy 0.8.2 版本基础上修改了大量 Bug 并添加了功能特性,目前在生产环境中被广泛部署。
优势对比
MySQL-Proxy 支持负载平衡、读写分离和 Failover,但不支持大数据量分库分表且性能较差。Atlas 相对于官方 MySQL-Proxy 的优势如下:
- 将主流程中所有 Lua 代码用 C 重写,Lua 仅用于管理接口
- 重写网络模型、线程模型
- 实现了真正意义上的连接池
- 优化了锁机制,性能提高数十倍
架构设计
Atlas 位于应用程序与 MySQL 之间。在后端 DB 看来,Atlas 相当于客户端;在前端应用看来,Atlas 相当于一个 DB。
它实现了 MySQL 的客户端和服务端协议,对应用程序屏蔽了 DB 细节,同时为了降低 MySQL 负担,维护了连接池。
常见问题
- 监控主从同步延迟? Atlas 不负责 MySQL 的主从同步操作,需要 DBA 自己管理。
- Java 程序连接 Atlas 发现不能读写分离? 检查 Java 框架是否默认将 autocommit 设置为 0。很多 Java 框架将语句封装在事务中,而 Atlas 会将事务请求都发向主库。
- 有 SQL 黑名单过滤机制吗? 有的,Atlas 会屏蔽不带 where 条件的 delete 和 update 操作,以及 sleep 函数。


