PL/Proxy
前面几个都是针对 MySQL 的 Sharding 方案PL/Proxy 则是针对 PostgreSQL 的设计思想类似 Teradata 的 Hash 机制数据存储对客户端是透明的客户请求发送到 PL/Proxy 后由这里分布式存储过程调用统一分发。 PL/Proxy 的设计初衷就是在这一层充当”数据总线”的职责所以当数据吞吐量支撑不住的时候只需要增加更多的 PL/Proxy 服务器即可。大名鼎鼎的 Skype 用的就是 PL/Proxy 的解决方案这是个基于 Python的解决方案。该工具的设计目标还有个 Re-balancing 在里面这倒是个比较激进的想法。目前只支持 MySQL 数据库。AmoebaAmoeba是一个以MySQL为底层数据存储并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求依据用户事先设置的规则将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比作者强调的是amoeba配置的方便基于XML的配置文件用SQLJEP语法书写规则比基于lua脚本的MySQL Proxy简单。Amoeba相当于一个SQL请求的路由器目的是为负载均衡、读写分离、高可用性提供机制而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS原则的思想。主要解决以下问题a). 数据切分后复杂数据源整合b). 提供数据切分规则并降低数据切分规则给数据库带来的影响c). 降低数据库与客户端连接d). 读写分离路由Amoeba For MySQL是专门针对MySQL数据库的方案架构示意图Amoeba For Aiadin是个更通用的方案他前端接收MySQL协议的请求后端可以使用MySQL、Oracle、PostGreSql等其他数据源这些对应用程序是透明的。架构示意图altasAtlas是由奇虎360公司Web平台部基础架构组开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL- Proxy 0.8.2版本的基础上修改了大量bug添加了很多功能特性。目前该项目在360公司内部得到了广泛应用3/4以上的MySQL业务已经接入了 Atlas平台每天承载的读写请求数达20亿条以上。主要功能特性1. 自动读写分离对应用透明2. 自动分表3. IP过滤包括指定具体IP和网段IP4. SQL语句黑白名单5. 字符集和默认数据库的自动修正6. 可强制读主库避免从库的同步延迟7. 主库宕机的情况下读操作不受影响8. 在挂接LVS的情况下可平滑重启应用不感知9. 自动检测DB状态故障或连接不上的DB自动摘除不再导入请求在故障或网络恢复后自动重新导入请求10. 可在线手动将某台DB设置为上线或下线状态11. 可在线手动增加或减少一台DB12. 从库间加权的负载均衡