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等