系列文档参考 MYSQL系列-整体架构介绍
前文已经实践基于Spring动态数据源和基于Sharing-JDBC的分库分表,本文主要讲述基于MYCAT的分库分表,前两篇如下:
- MYSQL系列-分库分表(二):Spring动态数据源实现分库分表落地实践-上
- MYSQL系列-分库分表(三):Sharding-JDBC实现分库分表落地实践-上
原始需求
同前面两章介绍
MYCAT介绍
基本介绍
MyCAT(全称为MySQL Cluster Autonomic Tuning)是一款开源的分布式数据库中间件,旨在提供高性能、高可用性和可伸缩性的数据访问解决方案。它是基于MySQL协议的代理服务器
,可以将多个MySQL数据库组织成一个逻辑的数据库集群,并提供了分片、负载均衡、读写分离、故障转移等功能。
官网地址如下:www.mycat.org.cn/
主要特点和功能
数据分片
:MyCAT支持将数据划分为多个分片,每个分片可以部署在不同的MySQL节点上。数据分片可以水平扩展数据库的容量和性能,并提供更好的负载均衡。负载均衡
:MyCAT作为代理服务器,可以根据负载情况自动将请求分发到不同的MySQL节点上,实现负载均衡和并行处理。它支持多种负载均衡策略,如轮询、权重、一致性哈希等。读写分离
:MyCAT可以将读请求和写请求分别路由到不同的MySQL节点上,实现读写分离。这可以提高数据库的并发性能,减轻主节点的压力,并提供更好的用户体验。实现原理
Mycat主要原理是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
当Mycat收到一个SQL时,会先解析这个SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到SQL里分片字段的值,并匹配分片函数,得到该SQL对应的分片列表,然后将SQL发往这些分片去执行,最后收集和处理所有分片返回的结果数据,并输出到客户端。
架构介绍
MyCat 在逻辑上由几个模块组成:通信协议、路由解析、结果集处理、数据库连接、监控等模块。
1、 通信协议模块:
指的是客户端与服务端之间的通信,涉及到 i/o 模型,会有客户端与服务端 i/o 的架构,还包含 MyCat 和 Mysql 交互的协议,通信协议模块承担底层的收发数据、线程回调处理工作,MyCat 通信协议默认采用Reactor模式,在协议层采用 Mysql 协议。
通讯协议模块职责是底层收发数据以及 Mysql 协议的模拟。
2、 路由解析模块:
负责对客户端传入的 sql 语句进行语法解析,解析语句的条件、类型、关键字、查询方式等,并进行优化。
3、 sql 执行模块:
比如有一条查询语句在路由解析模块查询解析并且优化完后交给 sql 执行模块,负责从连接池中获取连接,再根据路由解析的结果,把 sql 语句分发到相应的节点执行。
4、 数据库连接模块:
mycat 将 sql 语句分发到 mysql 各个节点,连接 mysql 涉及到连接维护,涉及到连接池等,就会对各个节点的结果进行一个处理,负责创建、管理、维护后端的连接池。为减少每次建立数据库连接的开销,数据库使用连接池机制对连接声明周期进行管理。
5、 结果集处理模块:
当执行完 sql 语句,它会有相关的结果集,mycat 拿到各个节点返回的结果集,对其结果集进行处理,负责对跨分片的查询结果进行汇聚、排序、截取等。
6、 监控管理模块:
负责 MyCat 的连接、MyCat 中的 i/o、内存等资源进行监控和管理。也会监控在 MyCat 中执行的 sql 语句,是插入为主还是查询为主,针对各个表的操作,针对于各个节点的操作,在监控平台中都可以看到,监控主要通过管理指令及监控服务展现一些监控数据,管理则主要通过轮询事件来检测和释放不适用的资源。
未完待续,下文讲述MYCAT配置分库分表实践操作
参考