04.09 浅谈MySQL分布式中间件MYCAT

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

Amoeba是阿里在2008年推出的,当时正好是在阿里去IOE的浪潮中,Amoeba提供了负载均衡,SQL过滤等功能,在2012年随着阿里业务量增长,Amoeba也越来越不适应当时不断增长的需求,同年在Amoeba的基础上阿里开源了替代Amoeba的产品Cobar,不过后来就没进行维护了,Cobar本身也存在不少问题,在2013年阿里推出了开源产品MYCAT,MYCAT在Cobar系统的基础上进行了升级和改造,修复了很多问题。MYCAT是基于Java的一个分布式数据库系统中间层,为高并发下数据库的分布式提供解决方案。

MYCAT的主要作用是什么?尚学堂•百战程序员陈老师指出数据库中间层是位于前端应用和后端数据库之间的一个层。传统Java项目使用数据库连接池的形式连接数据库,这样多个项目连接同一个数据库,冗余的连接会随着项目的增加而出现线性增长,这不利于数据库连接数量的控制,但是当使用中间层之后,前端应用统一通过中间层获取连接,将不用自己维护连接池,可避免连接数不断增加的问题。数据库中间层还可以屏蔽后端数据库的一些变更,使前台应用不受影响,例如对数据库进行了水平或者垂直切分。

浅谈MySQL分布式中间件MYCAT

MYCAT原生实现了对MySQL的支持,也可以通过jdbc形式连接其它关系型数据库 如 Oracle,Sqlserver,也可以连接非关系型数据库 如 mongodb,这个功能其他同类型产品没有。可实现数据库的读写分离,在后端的主从复制数据库集群中,通过MYCAT配置,将前台的写操作路由到主数据库中,将读操作路由到从数据库上。

MYCAT可以实现读写分离下的读操作负载均衡,将大量的读操作均衡到不同的从库上,主要出现在一主多从情形下。

MYCAT可实现数据库的高可用,在数据库主节点可用的情况下,配置一台可写从节点,这两个节点都配置在MYCAT中,当主节点宕机时,MyCAT会自动将写操作路由到备用节点上,但并不支持在切换之后的继续主从同步。

当读写分离已经不能满足持续增加的访问量时,MYCAT可实现数据库的垂直拆分,将所有的数据库表按照模块划分,不同类型的表拆分到不同的数据库服务器。

随着业务量的增长,垂直拆分之后如果又出现了数据库性能问题,则需要进行水平切分,这就是俗称的分库分表。将数据量很大的表数据切分到不同的服务器库中,表结构是一样的,而使用MYCAT实现水平切分,对前端应用是完全透明的,不用调整前台逻辑。

浅谈MySQL分布式中间件MYCAT


分享到:


相關文章: