当前位置:主页 > 查看内容

掌握6大模块、7个核心概念!帮你搞定Mycat中间件

发布时间:2021-06-27 00:00| 位朋友查看

简介:本文转载自微信公众号「石杉的架构笔记」,作者崔皓 。转载本文请联系石杉的架构笔记公众号。 开篇 近今年里随着经济的飞速发展,企业的业务也在不断膨胀,作为业务支撑的信息系统特别是数据库系统也面临前所未有的压力,行业应用所产生的数据呈爆炸式地增长……

本文转载自微信公众号「石杉的架构笔记」,作者崔皓 。转载本文请联系石杉的架构笔记公众号。 

开篇

近今年里随着经济的飞速发展,企业的业务也在不断膨胀,作为业务支撑的信息系统特别是数据库系统也面临前所未有的压力,行业应用所产生的数据呈爆炸式地增长。数据从原来的GB级别迅速增常到TB甚至是PB的规模,已经远远超过传统计算技术的要求,原来集中式的存储方式已经无法满足数据存储的要求,此时分布式数据存储由于良好的透明性、数据冗余性、扩展性、自治性逐渐进入人们的视野。为了更好的使用和管理分布式数据库,业内推出了不少优秀的分布式数据库中间件,Mycat就是其中之一,今天就来看看Mycat的架构和实现原理。本篇文章会学到以下内容:

分布式数据存储与Mycat

  • Mycat架构介绍
  • Mycat核心概念及配置
  • 分布式数据存储与Mycat

众所周知,在分布式数据库的使用场景下,数据的存储不像集中式数据库那样都存放在一台服务器的一个数据库中,而是会分布在不同的服务器的不同数据库中。而应用程序的会根据不同的数据库进行访问,如图1 所示,应用程序需要根据访问的数据库不同:数据库1、数据库2、数据库3使用不同的数据库连接,如果说某张数据表在三个数据库中都存在,也需要使用特定的方式对其进行访问,可以说在应用程序这端访问起来是比较麻烦的。

图1

分布式的数据库队增加了应用程序访问的复杂度

正因为应用程序在访问分布式数据库的时候会遇到类似的问题,所以引入了数据库中间件来简化应用程序需要面对的问题。如图2所示,在应用程序和数据库中间引入Mycat数据库中间件以后,让应用程序的编程更加方便,它不用在面对分布式的数据库,而只用针对Mycat中间件进行数据库编程就能完成对应的数据操作,并且适用于以下几种场景:

  • 读写分离:可以通过Mycat针对数据库1进行写操作,而对数据库2和3进行读操作。如果在写服务器出现宕机的情况,Mycat可以将写的请求暂时转移到其他的数据库服务器上,保证数据库的可用性。
  • 垂直分表分库:将订单表存放到数据库1和2中,将商品表存放到数据库3中。也就是把不同的表放在不同的库中。
  • 水平分表分库:将订单表的不同记录通过分片算法(例如:hash取模)分表存放到数据库1和2中。也就是将相同表的不同数据放到不同库的表中。
  • 访问不同的数据库:数据库1和2对应访问的就是MySQL数据库,而数据库3访问的是Oracle数据库。
  • 控制应用程序到数据库的连接数量:每一个数据库连接都会占用数据库服务器的资源,每个数据库服务器能够连接的请求也是有限的,这里Mycat可以控制前端应用请求数据库服务器的连接数量,保证数据库服务器的高可用。

换句话说,当应用程序发起一条SQL语句的时候,不用关心数据库存放在哪个服务器,以及数据库表是否做了分表分库,只用将要查的数据告诉Mycat就可以了,Mycat在考虑上述场景之后将结果返回给应用程序,让开发者更加方便快捷地操作数据。

图2

引入Mycat协助应用程序实现读写分离、分表分库操作

上面描述的这些数据操作如果在没有Mycat中间件的情况需要在应用程序端维护大量的代码,而有了Mycat之后应用程序只需要针对Mycat进行配置,并且对其变成就能完成这些操作。

Mycat是一个开源的面相企业应用开发的数据库中间件,支持大数据库集群、事物、ACID。适用于高可用性、数据库读写分离、数据分级存储保障、大型数据库的分表分库以及并行计算、数据库路由以及整合诸如MySQL、Oracle、SQL Server 等数据库。由于Mycat开源中间件有一个发展的过程,每个版本的迭代都会遇到一些问题,目前已经更新到了Mycat 2.0是一个相对稳定的版本。

如果有条件的同学尽量使用最新版本,或者使用Mycat 1.6.5 以上的版本,其修正了一些常用SQL函数的问题。不过Mycat 也不是万能的依旧会存在一些问题,我们这里把它的优缺点列出如下表格方便大家参考。


优点

缺点

拆分后业务清晰,拆分规则明确

部分业务表无法join,只能通过接口调用

系统之间容易扩展和整合

跨库事务难以处理

数据维护简单

垂直切分后某些业务数据过于庞大,仍然存在单体性能瓶颈

解决了单库大数据、高并发的性能瓶颈

拆分规则很难抽象

拆分规则封装好,对应用端几乎透明,开发人员无需关心拆分细节

分片事务一致性难以解决,需要通过XA或者借助其他分布式事务方式,例如:Redis、Zookeeper。

提高了系统的稳定性和负载能力

二次扩展时,数据迁移、维护难度大



本文转载自网络,原文链接:https://mp.weixin.qq.com/s/SckMYCrObp89YjJjH9X3VA
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐