1.Cetus开源
项目地址:https://github.com/cetus-tools/cetus/releases
由C语言开发的关系型数据库MySQL的中间件,基于MySQL Proxy开发,分为读写分离版和分库版本两个版本,是MySQL Router前身了。社区目前活动轨迹非常少,但还有企业使用。
2.MaxScale闭源
一款由mariadb公司出品的中间件Maxscale,该中间件能实现读写分离和读负载均衡
MaxScale虽是开放源代码的,但并不是一个“Open Source”的项目使用了特有的授权协议:BSL协议(https://mariadb.com/projects-using-bsl-11/)
3.Vitess开源
Youtube生产在使用的中间件,架构确实很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口。支持读写分离,分库分表,故障切换和数据备份。
4.MySQL Router开源
MySQL官方推荐的读写分离中间件,MySQL Router是MySQL Proxy的替代方案,
- 读写分离
- 无法动态更改配置。
- MGR中充当代理
5.ProxySql开源
ProxySQL是percona用C++语言开发的,一个轻量级开源软件,性能和功能满足读写中间件所需的绝大多数功能,其配置数据基于SQLite存储,目前已到v2.1.1版本
- 读写分离,语句级的规则,实现简单的sharding。
- 动态更改配置
- 请求SQL都要经过ProxySQL服务器,对CPU,内存有一定的要求
- MGR中充当代理
GitHub官网:https://github.com/sysown/proxysql/releases
percona官网:https://www.percona.com/downloads/proxysql
7.MyCAT开源
基于阿里开源的Cobar产品而二次研发的开源产品。
- 应用端链接MyCAT服务器,
- 能支持读写分离
- 支持多种分库分表算法。
- MyCAT配置文件MySQL路由相关信息。
- 单独维护。
- 支持mysql,pg,oracle ,sql server。
-性能损耗 20%~50%
整体设计思路和实现都很好,也是比较成熟的解决方案,在那个年代,MyCAT的整体设计思路和实现方式都是比较成熟的解决方案。
但目前社区现状很不好,基本慢慢被抛弃,原因可以自行了解。目前爱可生维护的衍生版本 DBLE。
8.ShardingSphere(Shardingjdbc+ShardingProxy+ShardingSidecar)开源
- Shardingjdbc:轻量级Java架构,在Java的JDBC层提供的额外服务,就是jdbc驱动二次包装jar,实现读写分离,复杂的分库分表逻辑 ,性能损耗7%
- ShardingProxy:类似与MyCAT,中间件软件实现读写分离,复杂分库分表。性能损耗20%
- 已于2020年4月16日成为 Apache 软件基金会的顶级项目。
除此之外 商业版本的淘宝的DRDS,平民软件OneProxy 等
总结
从MySQL读写分离理解,由于能分担主库的压力,很多情况会考虑读写分离,但是在使用时,就应该考虑到延迟是否敏感。存在延迟则把读请求放到主库,没延迟就读从库。
中间件方面:目前社区活跃度,关注度来说,Shardingjdbc发展趋势非常好。轻量级方面ProxySQL,MySQL Router目前社区活跃度也非常好。其他中间件可以学习他们的思想和技术。
读写分离中间件的引入对于架构系统复杂度来说,比较可控范围之内,结合业务模型选择合理的读写分离方式。




