Vitess
→ 返回 分布式数据库
Vitess 是 YouTube 开源的 MySQL 水平扩展方案:将大量 MySQL 实例组织成集群,通过 vtgate 路由 SQL,通过 vttablet 管理分片与复制,在 Kubernetes 上运维成熟(PlanetScale 等产品基于此)。适合已是 MySQL、数据量极大、希望保留 MySQL 语义的场景。
架构
应用
│ MySQL 协议
▼
vtgate(无状态,SQL 解析、路由、聚合)
│
├── vttablet → MySQL(shard 0)
├── vttablet → MySQL(shard 1)
└── vttablet → MySQL(shard N)
│
VReplication / binlog(复制、物化、迁移)
| 组件 | 职责 |
|---|
| vtgate | 入口,类似分库中间件 + 连接池 |
| vttablet | 每个 MySQL 前的 Sidecar,执行分片、复制、备份 |
| Topology | 分片拓扑(etcd / K8s 等) |
| VTorc | 可选,MySQL 主从故障切换编排 |
核心概念
| 概念 | 说明 |
|---|
| Keyspace | 逻辑库,对应一组分片 |
| Shard | 分片,如 -80、80-(按 key range) |
| VSchema | 分片键与路由规则(JSON) |
| VReplication | 基于 binlog 的复制与工作流(迁移、物化) |
分片键选择原则与 分库分表 相同:高基数、查询必带。
与 TiDB / ShardingSphere 对比
| 维度 | Vitess | TiDB | ShardingSphere |
|---|
| 底层存储 | 多实例 MySQL | TiKV(自研分布式存储) | |
| 协议 | MySQL | MySQL 兼容 | MySQL(JDBC 嵌入或 Proxy) |
| K8s | 一等公民 | Operator 部署 | 任意环境 |
| 运维心智 | 仍是「很多 MySQL」 | 「一个分布式集群」 | 中间件 + N 套 MySQL |
典型场景
- 单体 MySQL 无法承载写入,需要在线分片与连接收敛(vtgate 连接池)
- 已在 K8s,希望 GitOps 管理数据库拓扑
- 分片迁移、跨分片 Materialize(VReplication 工作流)
使用注意
| 项 | 说明 |
|---|
| 跨分片 JOIN | 能力有限,设计时尽量单分片完成 |
| 序列号 | 使用 Vitess 序列或应用 分布式 ID |
| 事务 | 单分片内本地事务;跨分片需 2PC 或避免 |
| 迁移 | VReplication 双写/切流,参考 数据传输 |
Spring / Java
相关链接