Mycat2 架构设计
整体架构
┌─────────────────────────────────────────────────────┐
│ Client Layer │
│ MySQL Client / JDBC / ODBC / Go │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Proxy Layer (Netty) │
│ ┌───────────┐ ┌───────────┐ ┌────────────────┐ │
│ │ MySQL │ │ Command │ │ Interceptor │ │
│ │ Protocol │ │Dispatcher │ │ Chain │ │
│ └───────────┘ └───────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Grid Layer (业务逻辑) │
│ ┌───────────┐ ┌───────────┐ ┌────────────────┐ │
│ │ Router │ │ Optimizer │ │ Transaction │ │
│ │ │ │ (Calcite) │ │ Manager │ │
│ └───────────┘ └───────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ Storage Abstraction │
│ ┌───────────┐ ┌───────────┐ ┌────────────────┐ │
│ │ JDBC │ │ Native │ │ MongoDB │ │
│ │ Adapter │ │ MySQL │ │ Adapter │ │
│ └───────────┘ └───────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────┘
核心模块
1. Proxy 模块
实现MySQL通讯协议框架,负责:
- MySQL协议报文解析、封装和发送
- 连接管理、会话管理
- Reactor架构,读写线程处理SQL解析
- Handler链模式,支持多种命令分发器
2. Proxy 配置
{
"proxy": {
"ip": "0.0.0.0",
"port": 8066,
"bufferPoolPageSize": 4194304,
"bufferPoolChunkSize": 8192,
"bufferPoolPageNumber": 2,
"reactorNumber": 2,
"commandDispatcherClass": "io.mycat.command.HybridProxyCommandHandler"
}
}
3. CommandDispatcher 类型
| 类名 | 说明 |
|---|---|
| HybridProxyCommandHandler | 混合代理模式,支持透传和分布式查询 |
| ReadAndWriteSeparationHandler | 纯读写分离模式 |
4. Grid 模块
Grid模块负责耗时的功能逻辑处理,运行在独立线程中:
- 分布式查询优化(SQL重写、执行计划生成)
- 多节点结果集合并
- 分布式事务协调
- 支持三种运行模式:Proxy内运行、独立进程(IPC)、独立MySQL服务
SQL执行流程
1. 客户端发送SQL到Mycat2
│
2. Mycat2 拦截器匹配SQL
│
3. 根据拦截器配置决定处理方式:
├── execute: 透传SQL到后端MySQL
├── distributedQuery: 分布式查询执行
├── explain: 查看执行计划
└── use/cache/transaction: 其他命令
│
4. 路由到目标数据节点
│
5. 执行SQL,合结果
│
6. 返回结果给客户端
线程模型
| 线程类型 | 职责 |
|---|---|
| IO线程 (Reactor) | 网络读写、协议解析、简单SQL处理 |
| Worker线程 | 复杂SQL处理、分布式查询、结果合并 |
| 定时任务线程 | 心跳检测、状态检查、超时处理 |
支持的存储后端
- MySQL (JDBC) - 主要支持,用于OLTP场景
- MySQL (Native) - 原生协议,性能更高
- MongoDB - 文档型数据库
- H2 - 嵌入式数据库,用于测试
- 通过JDBC扩展 - PostgreSQL、Oracle等