Gaea 2.4.2 介绍与选型指南

Gaea 2.4.2(小米开源 MySQL 分库分表中间件代理)认知与选型篇:项目沿革、四模块架构、功能边界与 SQL 兼容性,量化对比 MyCat2/ShardingSphere/Vitess 社区活跃度、版本节奏与兼容矩阵。

GaeaMySQL 中间件中间件2026/10/23

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.2https://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 同属 XiaoMi GitHub 组织,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):

  1. 本地配置(gaea.ini):gaea-proxy 进程直接使用的配置,一般不在运行时改变——config_type、监听端口、日志、管理端口账号等;
  2. 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 典型适用场景

  1. 存量 MyCat/kingshard 业务替换或新业务分库分表:Gaea 分片规则兼容 MyCat/kingshard 路由方式,且以 Go 单二进制交付、无 JVM 依赖,资源占用与部署复杂度低于 Java 系中间件(README 定位 + quickstart 交付形态);
  2. 多语言技术栈统一接入:代理层形态对应用零侵入,PHP/Go/Python/Java 均可直连;
  3. 需要轻量读写分离:namespace 内 slice 支持 master + slaves + statistic_slaves 三类后端角色,前端账号可配置 rw_split 读写分离(docs/configuration.md 的 users/slice 字段);
  4. 多租户 DB 中间层:cluster + namespace 两级隔离,配合白名单、黑名单 SQL、慢 SQL 指纹做租户治理;
  5. 生产验证背书:README 明确「在小米商城大陆和海外得到广泛使用,包括订单、社区、活动等多个业务」。

6.2 主要限制(选型前必须确认)

限制影响来源
无分布式事务跨分片写入无法保证原子性,业务需按分片键设计规避跨片事务compatibility.md、Roadmap
无平滑扩容/缩容扩容需自行迁移数据(Roadmap 未实现项)README Roadmap
分表场景 SQL 受限AVG 聚合、跨分片 JOIN、INSERT INTO SELECT、无列名 INSERT 等不支持compatibility.md
配置热加载依赖 etcdfile 模式改配置需重启 proxyconfiguration.md
社区节奏放缓最新 Release v2.4.2 发布于 2024-09-20,此后无新 ReleaseGitHub 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.2MyCat2ShardingSphereVitess
GitHub 仓库XiaoMi/GaeaMyCATApache/Mycat2apache/shardingspherevitessio/vitess
Stars(2026-10-23 实查)2,7641,73320,81321,391
开发语言GoJavaJavaGo
许可证Apache-2.0仓库页标注(见仓库 LICENSE)Apache-2.0Apache-2.0
项目归属小米中国区电商研发部开源社区(MycatApache 组织)Apache 顶级项目CNCF 毕业项目
最新 Releasev2.4.2(2024-09-20)版本发布稀疏(以仓库 Releases 为准)持续活跃迭代(5.x 系列)持续活跃迭代
版本节奏判断趋缓:2024-09 后无新 Release趋缓活跃活跃
部署形态独立代理(Go 单二进制)独立代理(Java)JDBC SDK + Proxy 双形态集群系统(VTGate/VTTablet 等)
运行时依赖无(静态编译)JVMJVM(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 能力与兼容矩阵

能力维度GaeaMyCat2ShardingSphereVitess
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):

  1. Gaea 仓库主页:https://github.com/XiaoMi/Gaea
  2. Release v2.4.2:https://github.com/XiaoMi/Gaea/releases/tag/v2.4.2
  3. 仓库内官方文档(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
  4. 竞品仓库: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 命令详解》。