两种实现方式:
第一种:应用程序层实现:指的是在应用程序内部及连接器中实现读写分离。
第二种:中间件层实现:是指在外部中间件程序实现读写分离。
第一种:应用程序层实现
架构图:
优点:
应用程序内部实现读写分离,安装既可以使用
减少一定部署难度
访问压力在一定级别以下,性能很好
缺点:
架构一旦调整,代码要跟着变
难以实现高级应用,如自动分库,分表
无法适用大型应用场景
第二种:中间件层实现:
优点:
架构设计更灵活
可以在程序上实现一些高级控制,如:failover,监控
可以依靠些技术手段提高mysql性能
对业务代码的影响小,同时也安全
缺点:
需要一定的开发运维团队的支持
简单解释各个中间层:
Cobar:
阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。
MyCAT:
社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,
OneProxy:
数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。
Vitess:
这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。
Kingshard:
Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
Atlas:
360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试
MaxScale与MySQL Route:
这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。MySQL Route是现在MySQL官方Oracle公司发布出来的一个中间件。