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分片,如 -8080-(按 key range)
VSchema分片键与路由规则(JSON)
VReplication基于 binlog 的复制与工作流(迁移、物化)

分片键选择原则与 分库分表 相同:高基数、查询必带。


与 TiDB / ShardingSphere 对比

维度VitessTiDBShardingSphere
底层存储多实例 MySQLTiKV(自研分布式存储)
协议MySQLMySQL 兼容MySQL(JDBC 嵌入或 Proxy)
K8s一等公民Operator 部署任意环境
运维心智仍是「很多 MySQL」「一个分布式集群」中间件 + N 套 MySQL

典型场景

  • 单体 MySQL 无法承载写入,需要在线分片连接收敛(vtgate 连接池)
  • 已在 K8s,希望 GitOps 管理数据库拓扑
  • 分片迁移、跨分片 Materialize(VReplication 工作流)

使用注意

说明
跨分片 JOIN能力有限,设计时尽量单分片完成
序列号使用 Vitess 序列或应用 分布式 ID
事务单分片内本地事务;跨分片需 2PC 或避免
迁移VReplication 双写/切流,参考 数据传输

Spring / Java


相关链接