GitHubのRDBパーティショニングの振り返り
(github.blog)-
10年以上前にRoRと単一のMySQLインスタンスで始まったGitHub
-
2019年にパーティショニングを開始し、2年間にわたってさまざまな作業を実施した振り返り
→ 2021年時点でDBの負荷が50%減少したとのこと
- 仮想パーティション
-
実際にテーブルを移動する前に、アプリケーションレイヤーで仮想的に分離
-
テーブルをグループ化してスキーマドメインとして束ね、SQL Linterを使って境界を強制
→ 後でパーティショニングする際の安全性を高めるため
- Query Linter と Transaction Linter で仮想境界を確認
- ダウンタイムなしでデータを移行
- Vitess の Vertical Sharding 機能を利用
→ VTGateをKubernetesクラスタにデプロイし、接続ポイントを変更
- Write-cutoverプロセスを導入
→ MySQLのReplication機能を使ってデータを別クラスタへフィード
→ ProxySQL を使ってMySQLクライアント接続をMultiplex
結果
-
2019年には単一クラスタだったmysql1は、平均で毎秒95万クエリに応答
-
2021年にはマルチクラスタへ分散され、平均で毎秒120万クエリに応答しつつホスト負荷は半減
まだコメントはありません。