原创

Mycat原理

mycat的操作使用并不是很难,我们只需要配置和修改server.xml.rule.xml.schema.xml三个文件即可,但是如果想在生产环境中使用的话,还是需要下一番功夫的,下面我们来简单说一下mycat的原理。
mycat在逻辑上由几个模块组成:通信协议、路由解析、结果集处理、数据库连接、监控等模块

1、通信协议模块
通信协议模块承担底层的收发数据、现成回调处理工作,主要采用Reactor、Proactor模式来提高效率。目前。mycat通信模块默认采用Reactor模式,在协议层采用mysql协议。

2、路由解析模块
路由解析模块负责对传入的SQL语句进行语法解析,解析从MYSQL协议中解析出来并进入该模块的SQL语句的条件、语句类型、携带的关键字等,对符合要求的SQL语句进行相关优化,最后根据这些路由计算单元进行路由计算。

3、结果集处理模块
结果集处理模块负责对跨分片的结果进行汇聚、排序、截取等。由于数据存储在不同的数据库中,所以对跨分片的数据需要进行汇聚。

4、数据库连接模块
数据库连接模块复制创建、管理、维护后端的连接池。为了减少每次建立数据库连接的开销,数据库使用连接池机制对连接生命周期进行管理。

5、监控管理模块
监控管理模块负责对Mycat中的连接、内存等资源进行等监控和管理。监控主要是通过管理命令实时地展现一些监控数据,例如连接数、缓存命中数等;管理则主要通过轮训事件来检测和释放不适用的资源。

6、SQL执行模块
SQL执行模块负责从连接池中获取相应的目标连接,对目标连接进行信息同步后,再根据路由解析的结果,把SQL语句分发到相应的节点执行。

总体执行流程如下:
由通信协议模块的读写事件通知发起。读写事件通知具体的回调代码进行这次读写事件的处理。管理模块的执行流程由定时器事件进行资源检查和资源释放时发起。
由客户端发送过来的数据通过协议解析、路由解析等流程进入执行组件,通过执行组件把数据发送到通信协议模块,最终数据被写入目标数据库。
后端数据库返回数据,通过协议解析后发送至回调模块。如果是涉及多节点的数据,则执行流程将会先进入结果集汇聚、排序等模块中,然后将处理后的数据通过通信协议模块返回到客户端。

通过上述图片大家发现了,在mycat的执行流程中,AIO、NIO、多线程、内存管理等各个方面都用到了,大家如果想看mycat的源码的话,可以自行学习。

本文链接地址:http://www.ysxbohui.com/article/65

正文到此结束