分布式MySQL数据库中间件-Cetus
2018-04-18 10:30:46 阿炯

Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能。Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用。专注于稳定、性能和分布式事务的MySQL数据库中间件,由网易数据库工程师王斌主要开发,采用GPLv2协议授权。


主要功能特性

Cetus分为读写分离和分库两个版本。

针对读写分离版本:
单进程无锁提升单个实例效率
支持透明的后端连接池
支持SQL读写分离
增强SQL路由解析与注入
支持prepare语句
支持结果集压缩
支持安全性管理
支持状态监控
支持tcp stream流式
支持域名连接后端


针对分库版本:
单进程无锁提升单个实例效率
支持透明的后端连接池
支持数据分库
支持分布式事务处理
支持insert批量操作
支持有条件的distinct操作
增强SQL路由解析与注入
支持结果集压缩
具有性能优越的结果集合并算法
支持安全性管理
支持状态监控
支持tcp stream流式
支持域名连接后端


Cetus 架构和实现

1.整体架构

Cetus 网络架构图如下所示:



Cetus位于应用程序与MySQL数据库之间,作为前端应用与数据库的通讯。其中前端应用连接LVS节点,LVS节点映射端口到多个Cetus服务,后者通过自身的连接池连接到后端的数据库。

2.功能实现
1).功能模块

Cetus 主要的功能模块包括以下五个部分:
1.读写分离
2.分库
3.SQL解析
4.连接池
5.管理功能

功能模块间的交互关系如下:



其中,SQL解析模块为后续读写分离和数据分片等功能解析出SQL类型、表名和查询条件等关键信息;连接池模块是自维护连接池,支持Cetus根据需求查询和检测后端,维护连接数,具有高效连接共享性、事务与Prepare的前后端绑定功能和热点连接重用与连接等待机制;管理功能模块通过用户在管理界面输入,独立认证并转到下一状态,给用户回复状态查询结果或调整参数。

2. 工作流程

Cetus 整体工作流程图如下:



其整体工作流程如下所述:

1).Cetus读取启动配置文件和其他配置并启动,监听客户端请求;

2).收到客户端新建连接请求后,Cetus经过用户鉴权和连接池判断连接数是否达到上限,确定是否新建连接;

3).连接建立和认证通过后,Cetus接收客户端发送来的SQL语句,并进行词法和语义分析,对SQL语句进行解析,分析SQL的请求类型,必要时改写SQL,然后选取相应的DB并转发;

4).等待后端处理查询,接收处理查询结果集,进行合并和修改,然后转发给客户端;

5).如收到客户端关闭连接的请求,Cetus判断是否需要关闭后端连接,关闭连接。

最新版本:


项目主页:https://github.com/Lede-Inc/cetus