暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 读写分离方案

liyuan 2025-01-09
147

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目前社区活跃度也非常好。其他中间件可以学习他们的思想和技术。

读写分离中间件的引入对于架构系统复杂度来说,比较可控范围之内,结合业务模型选择合理的读写分离方式。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论