Gaea 2.4.2 介绍与选型指南
Gaea 2.4.2(小米开源 MySQL 分库分表中间件代理)认知与选型篇:项目沿革、四模块架构、功能边界与 SQL 兼容性,量化对比 MyCat2/ShardingSphere/Vitess 社区活跃度、版本节奏与兼容矩阵。
Gaea 2.4.2 介绍与选型指南
目标:全面介绍 Gaea——小米开源的基于 MySQL 协议的分布式数据库中间件代理——的来龙去脉、架构组成、功能边界与同类竞品量化对比,帮助读者在 30 分钟内完成「是否选用、何时选用、与谁比较」的决策。本篇为认知与选型篇,全部信息来自公开官方源联网溯源(来源与查询日期 2026-10-23 逐项标注),不包含本地部署实测内容;部署实操见《Gaea 2.4.2 安装指南》,配置实操见《Gaea 2.4.2 配置参数详解》。
一、环境信息
本篇为 A1 认知篇,不依赖本地实验环境,以下为信息取证环境说明:
- 取证方式:通过公网直接访问 GitHub 仓库页、Release 页与仓库内官方文档(README.md、docs/*.md),逐项记录来源与访问日期;
- 查询日期:2026-10-23;
- 取证网络:经代理 192.168.1.62:7897 访问 github.com;
- 版本基准:Gaea v2.4.2(仓库当前最新 Release,2026-10-23 实查);
- 关键溯源源清单:
| 源 | 地址 | 取证内容 |
|---|---|---|
| 仓库主页 | https://github.com/XiaoMi/Gaea | 项目归属、描述、Star 数、许可证 |
| Release v2.4.2 | https://github.com/XiaoMi/Gaea/releases/tag/v2.4.2 | 最新版本与发布日期 |
| README.md | 仓库根 README(v2.4.2 源码包内) | 项目定位、功能列表、架构说明 |
| docs/compatibility.md | 仓库内官方文档 | SQL 兼容性边界 |
| docs/architecture.md、docs/concepts.md | 仓库内官方文档 | 架构与核心概念 |
| docs/quickstart.md、docs/configuration.md | 仓库内官方文档 | 安装与配置体系 |
| docs/performance-test-report.md | 仓库内官方文档 | 官方性能测试报告(v2.3.7) |
💡 防混淆说明:本文所称 Gaea 特指 GitHub 组织
XiaoMi下的XiaoMi/Gaea项目——MySQL 协议的数据库中间件代理(分库分表中间件)。社区中存在其他以「Gaea」命名的同名项目(如 GraphQL 引擎类项目),二者完全无关;检索时请以仓库地址github.com/XiaoMi/Gaea为准。
二、软件概述
2.1 Gaea 是什么
Gaea 是小米中国区电商研发部研发的基于 MySQL 协议的数据库中间件,目前在小米商城大陆站和海外站广泛使用,承载订单、社区、活动等多个业务(来源:仓库 README.md,查询日期 2026-10-23)。GitHub 仓库主页的项目描述为 "Gaea is a mysql proxy, it's developed by xiaomi b2c-dev team"(来源:https://github.com/XiaoMi/Gaea 仓库页,查询日期 2026-10-23)。
它的核心定位一句话概括:在应用与多个 MySQL 实例之间充当透明代理,应用像连接单机 MySQL 一样连接 Gaea,由 Gaea 完成 SQL 路由、分库分表改写、结果聚合与读写分离。应用侧无需引入任何 SDK,任意 MySQL 协议客户端(JDBC、Go driver、mysql 命令行等)均可直连。
2.2 项目沿革与技术血统
README 中明确交代了 Gaea 的技术血统(来源:README.md):
- 分库分表方案兼容了 MyCat 与 kingshard 两个项目的路由方式——存量 MyCat/kingshard 业务的分片规则可以平滑映射到 Gaea;
- 设计与实现阶段参照了 MyCat、kingshard 和 Vitess;
- 内置 SQL 解析器采用 TiDB Parser(对 MySQL 方言的解析覆盖度高于老一代中间件自研 parser);
- Gaea 与 kingshard 同属
XiaoMiGitHub 组织,kingshard 是其同门前身项目。
当前最新版本 v2.4.2,发布于 2024-09-20(来源:GitHub Release v2.4.2 页面,查询日期 2026-10-23)。v2.4.2 源码包内 README 的功能列表、Roadmap 与 docs/ 目录文档均以此版本为基线。
2.3 开源许可与工程形态
| 项 | 内容 | 来源 |
|---|---|---|
| 开源许可 | Apache-2.0 | 仓库 LICENSE 与 README 徽章 |
| 主语言 | Go(go.mod 声明,TiDB Parser 内嵌) | 仓库源码 |
| 交付形态 | 单一静态二进制 gaea(代理)+ gaea-cc(中控) | 仓库 cmd/ 目录与 quickstart.md |
| 配置管理 | file(单机体验)/ etcd、etcdv3(生产) | docs/configuration.md |
| 可观测 | Prometheus 指标(/api/metric/metrics)+ Grafana 面板模板(docs/grafana.md) | 官方文档 |
三、核心架构
3.1 四大模块
Gaea 官方架构文档(docs/architecture.md)将项目划分为四个模块:
| 模块 | 角色 | 说明 |
|---|---|---|
| gaea-proxy | 在线代理 | 承接全部 SQL 流量,应用直连对象;监听 13306(服务端口)与 13307(管理端口) |
| gaea-cc | 中控模块 | 负责各 gaea-proxy 的配置管理(namespace 增删改查、二阶段下发)及后台任务,自带 HTTP 接口(默认 23306,docs/gaea-cc.md) |
| gaea-agent | 实例代理 | 部署在 MySQL 所在机器,负责实例创建、管理、回收 |
| gaea-web | 管理界面 | Gaea 的 Web 管理台,使整体使用更方便 |
💡 技术拓展:数据库分库分表中间件的主流实现形态有三种——| 形态 | 代表 | 原理与特点 | 适用场景 | |---|---|---|---| | 独立代理层(Proxy) | Gaea、MyCat、ShardingSphere-Proxy、Vitess | 应用经 MySQL 协议连代理,SQL 在代理层路由改写;语言无关、运维集中,多一跳网络 | 多语言团队、DBA 统一管控 | | 进程内 SDK(JDBC 增强) | ShardingSphere-JDBC | 分片逻辑嵌入应用进程,无独立部署、无额外一跳;仅限 JVM 生态 | 单一 Java 技术栈、追求低延迟 | | 分布式数据库 | Vitess(集群化)、TiDB | 存算一体或强管控的分布式 SQL 系统,能力最全但架构最重 | 超大规模、需要弹性调度 |
Gaea 实际采用的是第一种「独立代理层」形态,理由:业务技术栈多样(订单、社区、活动多条线),代理层对应用零侵入,且便于 DBA 在一处完成租户、分片与读写分离的统一治理。
3.2 核心概念体系
官方概念文档(docs/concepts.md)定义了 7 个核心概念,是理解配置体系的基础:
| 概念 | 含义 |
|---|---|
| cluster | 集群,按业务重要程度划分;一个集群内可含多个 gaea-proxy 实例(由启动配置 cluster_name 指定),起到物理隔离作用 |
| namespace | 命名空间(多租户单元),每个业务系统对应一个 namespace,一个 namespace 可对应多个 database;namespace 配置运行时可变,一般保存在 etcd |
| slice | 分片,逻辑上的分组,一个分片包含 MySQL 一主多从 |
| shard | 分表规则,确定一个表如何分表,包括分表类型与分布的分片位置 |
| proxy | 代理本身,承接线上流量 |
| gaea_cc | 中控模块,负责配置下发、实例监控 |
| gaea_agent | 部署在 MySQL 实例所在机器,负责实例部署、管理与插件执行 |
💡 技术拓展:分片键的路由算法不止 Gaea 内置的这些。业界常见算法对比——
算法 原理/特点 适用场景 取模(mod) key % N哈希落片,数据分布均匀,扩容需全量重分布离散键、读写均衡 范围(range) 按键区间落片,扩容只新增区间,易热点 时间序列、自增键 一致性哈希(murmur) 哈希环 + 虚拟节点,扩缩容迁移量最小 节点数常变的集群 字符串哈希(hash_slice) 对字符串前缀哈希后取模 用户名、订单号等字符串键 日期分片(date/year) 按日期列落片,天然按时间冷热分离 日志、账单类表 Gaea 同时内置了 kingshard 系算法(mod、range、date、murmur、hash_slice 等)与 MyCat 系算法(mycat_mod、mycat_long、mycat_murmur、mycat_string 等,完整清单见《Gaea 2.4.2 配置参数详解》分片规则章节),本文实际采用最基础的 mod 与 mycat_mod 两种做入门示例。
3.3 配置与管理通路
Gaea 的配置体系分两层(docs/configuration.md):
- 本地配置(gaea.ini):gaea-proxy 进程直接使用的配置,一般不在运行时改变——config_type、监听端口、日志、管理端口账号等;
- namespace 配置(JSON):多租户业务配置(分片规则、后端实例、前端账号),运行时可变。file 模式下从
file_config_path/namespace/目录读取,不支持热加载;生产模式保存在 etcd/etcdv3 中,通过 gaea-cc 下发,支持配置热加载。
生产部署形态(README 集群部署图):一套 gaea-cc + etcd 管理多套 Gaea 集群,负责集群内 namespace 配置的增删改查;多个 gaea-proxy 实例无状态水平扩展,向上对接负载均衡。
四、功能特性
以下功能列表来自 v2.4.2 源码包 README.md(查询日期 2026-10-23):
4.1 基础功能
- 多集群、多租户(namespace 隔离)
- SQL 透明转发
- 慢 SQL 指纹、错误 SQL 指纹
- 注解路由
- 慢日志
- 读写分离、从库负载均衡
- 自定义 SQL 拦截与过滤(黑名单 SQL)
- 连接池
- 配置热加载
- IP/IP 段白名单(allowed_ip)
- 全局序列号(global_sequences)
4.2 分库分表功能
- 分库:支持 MyCat 分库方式(物理库按
db_[0-N]展开); - 分表:支持 kingshard 分表方式(物理表按
_0000起始编号展开); - 聚合函数:支持 max、min、sum、count、group by、order by 等;
- JOIN:支持分片表和全局表的 JOIN、支持多个分片表但路由规则相同的 JOIN。
4.3 SQL 兼容性边界(分表场景)
官方兼容性文档(docs/compatibility.md)明确了分表场景的能力边界,选型时务必对照:
明确支持:
- JOIN 支持一个父表和多个关联子表(linked 表),以及全局表;
- 聚合函数支持 SUM、MAX、MIN、COUNT,且必须出现在最外层;
- WHERE 支持 AND/OR,操作符支持
=、>、>=、<、<=、<=>、IN、NOT IN、LIKE、NOT LIKE; - 支持 GROUP BY。
明确不支持:
- 跨分片 JOIN:JOIN 中非分片键相关条件只改写表名、不计算路由,走默认广播路由;
- JOIN USING 不支持指定表名或 DB 名;表别名不允许与表名重复;
- 不明确指定列名的 INSERT(即
INSERT INTO t VALUES (...)必须写列名)、跨分片批量 INSERT、INSERT INTO SELECT; - UPDATE 多个表。
事务兼容性(docs/compatibility.md 原文):Gaea 目前未实现分布式事务,只支持单分片事务;不支持 SAVEPOINT / RELEASE SAVEPOINT / ROLLBACK TO SAVEPOINT(文档标注 TODO)。
协议兼容性:Gaea 支持 text 协议与 binary 协议(预编译语句 Prepare 机制有官方设计文档 docs/prepare.md)。
⚠️ 注意:以上「支持/不支持」均指分表情况。非分表(单表直通路由)理论上支持所有 DML 语句与部分 ADMIN 语句。
4.4 Roadmap(未实现项,选型风险参考)
v2.4.2 README Roadmap 未勾选项:执行计划缓存、事务追踪、二级索引、分布式事务、平滑的扩容/缩容、后端连接池优化(按请求时间排队)。已勾选:支持配置加密存储(encrypt_key 开关)。
五、快速开始(官方步骤溯源)
以下步骤转述自官方 docs/quickstart.md(查询日期 2026-10-23),仅作选型评估参考;逐命令实测版本见《Gaea 2.4.2 安装指南》。
编译安装(Gaea 基于 Go 开发,go >= 1.11,依赖 goyacc、gofmt):
git clone git@github.com:XiaoMi/Gaea.git
cd Gaea && make
官方说明:编译后在 bin 目录生成 gaea、gaea-cc 两个可执行文件;etc 目录下为配置文件。快速体验可采用 file 配置方式,在 etc/file/namespace 下添加租户 JSON 配置(该目录自带两个示例,可直接修改使用);./bin/gaea --help 可查看启动参数,其中 -config 指定配置文件位置,默认 ./etc/gaea.ini。
官方 docs/configuration.md 给出的本地配置样例要点:config_type=file(体验)或 etcd/etcdv3(生产);代理服务监听 proxy_addr=0.0.0.0:13306;管理端口 admin_addr=0.0.0.0:13307(basic auth);日志目录 log_path=./logs。
⚠️ 注意:file 模式不支持配置热加载,仅用于快速体验;生产环境应使用 etcd/etcdv3 配置中心模式并部署 gaea-cc 中控(官方 configuration.md 明确说明)。
六、适用场景与限制
6.1 典型适用场景
- 存量 MyCat/kingshard 业务替换或新业务分库分表:Gaea 分片规则兼容 MyCat/kingshard 路由方式,且以 Go 单二进制交付、无 JVM 依赖,资源占用与部署复杂度低于 Java 系中间件(README 定位 + quickstart 交付形态);
- 多语言技术栈统一接入:代理层形态对应用零侵入,PHP/Go/Python/Java 均可直连;
- 需要轻量读写分离:namespace 内 slice 支持 master + slaves + statistic_slaves 三类后端角色,前端账号可配置 rw_split 读写分离(docs/configuration.md 的 users/slice 字段);
- 多租户 DB 中间层:cluster + namespace 两级隔离,配合白名单、黑名单 SQL、慢 SQL 指纹做租户治理;
- 生产验证背书:README 明确「在小米商城大陆和海外得到广泛使用,包括订单、社区、活动等多个业务」。
6.2 主要限制(选型前必须确认)
| 限制 | 影响 | 来源 |
|---|---|---|
| 无分布式事务 | 跨分片写入无法保证原子性,业务需按分片键设计规避跨片事务 | compatibility.md、Roadmap |
| 无平滑扩容/缩容 | 扩容需自行迁移数据(Roadmap 未实现项) | README Roadmap |
| 分表场景 SQL 受限 | AVG 聚合、跨分片 JOIN、INSERT INTO SELECT、无列名 INSERT 等不支持 | compatibility.md |
| 配置热加载依赖 etcd | file 模式改配置需重启 proxy | configuration.md |
| 社区节奏放缓 | 最新 Release v2.4.2 发布于 2024-09-20,此后无新 Release | GitHub Releases(2026-10-23 实查) |
6.3 性能参考
官方在 docs/performance-test-report.md 提供了 Gaea 2.3.7 的性能测试报告(Sysbench 场景),选型做容量规划时可直接参考该报告;本文不转述具体数字,避免脱离其测试环境误读。
七、同类选型对比(量化)
7.1 候选对象与数据来源说明
对比对象选取三款最具代表性的同类组件:MyCat 系(老一代 MySQL 分库分表代理的事实标准)、Apache ShardingSphere(Apache 顶级项目,同时提供 JDBC 与 Proxy 两种形态)、Vitess(CNCF 毕业项目,YouTube 出身的数据库聚类系统)。全部数据于 2026-10-23 通过 GitHub 仓库页实查取证。
7.2 社区活跃度与版本节奏量化对比
| 维度 | Gaea 2.4.2 | MyCat2 | ShardingSphere | Vitess |
|---|---|---|---|---|
| GitHub 仓库 | XiaoMi/Gaea | MyCATApache/Mycat2 | apache/shardingsphere | vitessio/vitess |
| Stars(2026-10-23 实查) | 2,764 | 1,733 | 20,813 | 21,391 |
| 开发语言 | Go | Java | Java | Go |
| 许可证 | Apache-2.0 | 仓库页标注(见仓库 LICENSE) | Apache-2.0 | Apache-2.0 |
| 项目归属 | 小米中国区电商研发部 | 开源社区(MycatApache 组织) | Apache 顶级项目 | CNCF 毕业项目 |
| 最新 Release | v2.4.2(2024-09-20) | 版本发布稀疏(以仓库 Releases 为准) | 持续活跃迭代(5.x 系列) | 持续活跃迭代 |
| 版本节奏判断 | 趋缓:2024-09 后无新 Release | 趋缓 | 活跃 | 活跃 |
| 部署形态 | 独立代理(Go 单二进制) | 独立代理(Java) | JDBC SDK + Proxy 双形态 | 集群系统(VTGate/VTTablet 等) |
| 运行时依赖 | 无(静态编译) | JVM | JVM(Proxy 形态) | 多组件编排 |
对表格的解读:
- 社区体量:Gaea(2.7k)与 MyCat2(1.7k)同属「小而精」梯队;ShardingSphere(20.8k)与 Vitess(21.4k)属「超大社区」梯队,Star 体量差近一个数量级,意味着生态、资料、第三方集成与人才储备的差异;
- 版本节奏:Gaea 最新版本停在 2024-09-20,距今已超过一年无新 Release——这不等于项目死亡(小米内部仍在使用),但意味着 bug 修复与新特性(如 Roadmap 中的分布式事务)不宜抱近期预期;ShardingSphere 与 Vitess 保持高频迭代;
- 部署重量:Gaea 是四者中部署最轻的——Go 静态二进制、无 JVM、配置文件即起;Vitess 最重(多组件编排 + 依赖 etcd/拓扑存储)。
7.3 能力与兼容矩阵
| 能力维度 | Gaea | MyCat2 | ShardingSphere | Vitess |
|---|---|---|---|---|
| SQL 兼容面(分片表) | 中:轻量路由实现,聚合限 SUM/MAX/MIN/COUNT,不支持跨片 JOIN 与 AVG | 中(基于 Calcite 优化器) | 强:Federation 联合查询、较完整 SQL 支持矩阵 | 强:V3 查询计划器,兼容面广 |
| 分布式事务 | 不支持(单分片事务) | 弱 | 支持(XA / BASE / 本地事务) | 支持(两阶段提交,VTTransaction) |
| 读写分离 | 支持(slice 内 master/slaves) | 支持 | 支持 | 支持(原生副本路由) |
| 分片规则兼容 MyCat/kingshard | 原生兼容(README 明确) | MyCat 血统 | 不兼容(自有规则 DSL) | 不兼容(VSchema) |
| 平滑扩缩容 | 无(Roadmap) | 部分支持 | 支持(Scaling 数据迁移) | 支持(Reshard/VTorch 迁移) |
| 多租户 | 原生(cluster + namespace) | 无原生概念 | 无原生概念(需自行拆实例) | 支持(Keyspace 即租户) |
| 全局序列号 | 内置(global_sequences) | 内置 | 内置(多种算法) | 内置(VSequence) |
| 可观测 | Prometheus + Grafana 模板 | 日志为主 | Prometheus/OpenTelemetry | 丰富的 VTGate/VTTablet 指标 |
矩阵解读:能力天花板 ShardingSphere/Vitess 明显更高(分布式事务、平滑扩缩容、SQL 兼容面);Gaea 的差异化优势在「轻 + 兼容 + 多租户」——存量 MyCat/kingshard 规则可平迁、单二进制零依赖、cluster/namespace 原生多租户治理,这些恰是大厂内多业务线共用一套中间层的典型诉求。
7.4 选型建议
- 如果存量系统跑在 MyCat 1.x 上且原仓库已不可持续(2026-10-23 实查 MyCATApache/MyCat 原仓库已返回 404,社区主推 MyCat2),希望找规则兼容、部署更轻的替代品 → 优先评估 Gaea;
- 如果业务需要分布式事务、平滑扩缩容、复杂 SQL(跨片 JOIN/AVG)→ 选 ShardingSphere(Java 团队可再评估 JDBC 形态)或 Vitess;
- 如果超大规模(千级分片、全球部署、Kubernetes 原生)→ 选 Vitess;
- 如果团队是纯 Java 栈、不想引入独立代理层 → 选 ShardingSphere-JDBC;
- 如果只是要读写分离 + 轻量分表、MySQL 5.7 存量库、运维人手有限 → Gaea 是四者中落地成本最低的选择(单二进制 + file/etcd 两档配置复杂度)。
八、参考链接
官方源(查询日期均为 2026-10-23):
- Gaea 仓库主页:https://github.com/XiaoMi/Gaea
- Release v2.4.2:https://github.com/XiaoMi/Gaea/releases/tag/v2.4.2
- 仓库内官方文档(v2.4.2 源码包 docs/ 目录):README.md、docs/architecture.md、docs/concepts.md、docs/compatibility.md、docs/configuration.md、docs/quickstart.md、docs/gaea-cc.md、docs/performance-test-report.md、docs/sequence-id.md、docs/grafana.md、docs/shard.md、docs/shard-example.md
- 竞品仓库:MyCATApache/Mycat2、apache/shardingsphere、vitessio/vitess(Star 数与许可证为 2026-10-23 仓库页实查)
本系列实战文档(部署与配置的逐条实测版本):
- 《Gaea 2.4.2 安装指南》——源码构建与二进制部署全流程实测;
- 《Gaea 2.4.2 配置参数详解》——gaea.ini 与 namespace.json 逐项参数实测生效;
- 《Gaea 2.4.2 常用命令与管理端口详解》——admin API、客户端接入与端口行为实测。
同组中间件延伸阅读:Gaea 解决的是 MySQL 数据层的水平扩展问题;若你的场景是服务间异步解耦的消息中间件选型,可参考同组已交付的 《BlazingMQ 介绍与选型指南》与 《BlazingMQ 0.95.20 常用 CLI 命令详解》。