Vitess
MySQL を水平方向にシャーディングし、そのシャーディングを単一の MySQL 互換エンドポイントの裏に隠すクラスタリングシステム。
- カテゴリ: Storage & Database
- CNCF 成熟度: Graduated
- 言語: Go
- ライセンス: Apache-2.0
- リポジトリ: vitessio/vitess
- ドキュメント基準コミット:
7924743(2026-06-22,main)
何をするものか
Vitess はアプリケーションと MySQL サーバ群の間に位置する。アプリは VTGate と呼ばれるステートレスなプロキシに、あたかも単一の MySQL サーバであるかのように接続する。VTGate は各クエリをパースし、実行計画を立て、適切なシャードへルーティングする。シャーディングのロジックはアプリではなく Vitess 側に置かれる。
Vitess のデプロイは論理データベース (keyspace) を複数のシャードに分割し、各シャードは primary と replica の MySQL グループで支える。VTTablet と呼ばれるサイドカーが各 MySQL インスタンスの隣で動き、クエリ実行・コネクションプール・ヘルスチェック・バックアップを担う。コントロールプレーン (vtctld, VTOrc, VTAdmin) がスキーマ変更・リシャーディング・フェイルオーバを担う。トポロジのメタデータは etcd・ZooKeeper・Consul に保存される。
Vitess は 2010 年に YouTube で、単一サーバの限界を超えて MySQL をスケールさせるために始まった。既に MySQL を運用していて 1 台では足りなくなり、アプリを書き換えず MySQL ワイヤプロトコルも捨てずにスケールアウトしたいチーム向けである。
いつ使うか
- 1 台の primary ではデータ量や書き込み負荷を支えきれない規模で MySQL を運用している。
- シャード選択のロジックをアプリのコードに埋め込まずにシャーディングしたい。
- 多数の MySQL インスタンスにまたがるオンラインリシャーディング・非ブロッキングなスキーマ変更・管理されたフェイルオーバが必要。
- Kubernetes 上で、多数のバックエンドに対し単一の MySQL エンドポイントを見せるプロキシ層が欲しい。
1 台の MySQL でまだ負荷をさばけるなら不向きである。Vitess はトポロジサービス・プロキシ・サイドカーという運用層を増やし、それは規模が出て初めて見合う。また完全なクロスシャード ACID 分離の代替にもならない。クロスシャードトランザクションにはアプリが理解しておくべき制約が伴う。
このディープダイブの構成
- 歴史: YouTube での起源・CNCF 卒業・進化の経緯。
- アーキテクチャ: コンポーネントとクエリの流れ。
- 採用事例・エコシステム: 誰が動かし、周囲に何があるか。
- 内部実装: ソースから読んだ VTGate のクエリパス。
- はじめに: examples からのローカルクラスタ。