MySQL分布式中间件MYCAT解析


声明:本文转载自https://my.oschina.net/ruoli/blog/1789370,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

在应用系统用户量不断增加之后,带来性能上的瓶颈,此时通过在应用服务端添加负载均衡即可提升性能,但是系统访问的数量还在不断增加,有一天发现再增加应用层的负载均衡已经达不到预期的效果了,此时的性能瓶颈就出现在了数据库,单台数据库已经达到了性能上限,但是将数据库进行负载均衡是非常麻烦的,此时应该考虑使用数据库层的分布式中间件产品MYCAT,它为数据库访问量不断增大出现性能瓶颈提供了解决问题的思路。

1、MYCAT的起源

         阿里巴巴在2008年推出了Amoeba,当时正好是在阿里去IOE的节点中,提供了负载均衡,SQL过滤等功能,在2012年随着阿里业务量增长,不适应到时的需求,同年在Amoeba的基础上阿里开源了替代Amoeba的产品Cobar,不过后来就没进行维护了,Cobar本身也存在不少问题,在2013年阿里推出了开源产品MYCAT,对Cobar系统进行了升级和改造,修复了很多问题(例如在高并发下回导致Cobar假死),同事开源社区非常活跃,在2017年,MYCAT推出了1.6版本。

 

2、什么是MYCAT?

    MYCAT是基于Java的一个分布式数据库系统中间层,为高并发下数据库的分布式提供解决方案。

 

3、MYCAT的主要作用是什么?

    数据库中间层是位于前端应用于后端数据库之间的一个层。

  1. 传统Java项目使用数据库连接池的形式连接数据库,这样多个项目连接同一个数据库,冗余的连接会随着项目的增加而出现线性增长,这不利于控制数据库连接的数量,但是当使用中间层之后,前端应用统一通过中间层获取连接,将不用自己维护连接池。
  2. 数据库中间层还可以屏蔽后端数据库的一些变更,使前台应用不受影响,例如对数据库进行了水平或者垂直切分。
  3. MYCAT原生实现了对MySQL的支持,也可以通过jdbc形式连接其他关系型数据库 如 Oracle,Sqlserver,也可以连接非关系型数据库 如 mongodb,这个功能其他同类型产品没有。
  4. 可实现数据库的读写分离,在后端的主从复制数据库集群中,通过MYCAT配置,将前台的写操作路由到主数据库中,将读操作路由到从数据库上。
  5. MYCAT可以实现读写分离下的读操作负载均衡,将大量的读操作均衡到不同的从库上,主要出现在一主多从情形下。
  6. MYCAT可实现数据库的高可用,在数据库主节点可用的情况下,配置一台可写从节点,这两个节点都配置在MYCAT中,当主节点宕机时,MyCAT会自动将写操作路由到备用节点上,但并不支持在切换之后的继续主从同步。
  7. 当读写分离已经不能满足持续增加的访问量时,MYCAT可实现数据库的垂直拆分,将所有的数据库表按照模块划分,不同类型的表拆分到不同的数据库服务器。
  8. 随着业务量的增长,垂直拆分之后如果又出现了数据库性能问题,则需要进行水平切分,这就是俗称的分库分表。将数据量很大的表数据切分到不同的服务器库中,表结构是一样的,而使用MYCAT实现水平切分,对前端应用是完全透明的,不用调整前台逻辑。

4、MYCAT使用场景

        当业务系统的读写操作都在一台数据库,并且数据库出现了性能问题,而且对数据库的所有操作中读负载明显高于写负载时,此时应使用MYCAT读写分离方案。

        当数据表数据量达到1000万以后,所有的优化操作都已经达到上限了,此时应使用MYCAT的分库分表功能。

        在统计报表系统中,也可以使用MYCAT加速数据的统计分析。

        MYCAT还可以使用在需要同时查询多种数据库的场景,MYCAT支持通过JDBC连接到不同类型的数据库。

 

5、MYCAT的优势

         MYCAT是基于阿里巴巴Cobar进行开发,经历了Alibaba大数据业务的考验。

         MYCAT是基于Java进行开发,开源免费,资料文档相对容易找到,跨平台移植更方便。

         MYCAT社区活跃,使用人数多,说明功能相对稳定。

         支持多种关系型和非关系性数据库。

 

6、MYCAT 其他概念

        逻辑库,逻辑库是存在于MYCAT中的一个数据库定义,相当于后端数据库分片之后的一个集合视图,前端应用只需要关注逻辑库而并不需要关注它的分片结构,MYCAT会保存逻辑库的定义,而不会保存逻辑库数据,同理的概念还有逻辑表,数据库表进行水平切分后分布在不同的服务器中,前端应用只需要对逻辑表进行操作。

         ER关系分片策略,在进行数据库表的垂直切分时,MYCAT可按照ER关系,将相互关联的表切分到相同的数据库中,提升查询效率。

         全局序列号,数据库分片之后,相同的表可能产生相同的ID,全局序列号可是提供跨分片的序列号。

 

本文发表于2018年04月03日 22:38
(c)注:本文转载自https://my.oschina.net/ruoli/blog/1789370,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1906 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1