看到帝国网站管理系统(EmpireCMS)的商业版支持MYSQL多服务器读写分离功能,于是开始琢磨下。
MySQL的主从复制+读写分离技术有以下解决方案:
- 官方的MySQL-proxy(http://www.oschina.net/p/mysql-proxy)
- 阿里巴巴的Amoeba(http://www.oschina.net/p/amoeba)
MySQL-Proxy是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景:
- 负载平衡和故障转移处理
- 查询分析和日志
- SQL宏(SQL macros)
- 查询重写(query rewriting)
- 执行shell命令
MySQL Proxy更强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。
Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。
参考资料:
- http://www.open-open.com/lib/view/open1387074956546
- http://segmentfault.com/q/1010000000304576
- http://www.itpub.net/thread-1184103-1-1
- http://www.th7.cn/db/mysql/201405/54877.shtml
Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。
Amoeba主要解决以下问题:
- 数据切分后复杂数据源整合
- 提供数据切分规则并降低数据切分规则给数据库带来的影响
- 降低数据库与客户端连接
- 读写分离路由
参考资料: