18 ポイント 投稿者 xguru 2020-12-14 | 2件のコメント | WhatsAppで共有
  • SlackがActive-Activeクラスタ構成から、MySQLの水平スケーリングシステムであるVitessへ移行した話

  • 2017年から移行を開始し、現在はVitessが全クエリの99%を処理中で、年末までに完全移行の予定

→ 現在のピーク時は230万QPS(200万が読み取り、30万が書き込み)

→ クエリレイテンシの中央値は2ms、p99クエリレイテンシは11ms

  • SlackはLAMPスタック(Linux, Apache, MySQL, PHP)で開始

  • 3つのDBクラスタ

→ シャード: すべてのメッセージ、チャンネル、DMなどのユーザーデータ。ワークスペースIDでパーティショニングされ、1つのワークスペースは1つのシャードに属する

つまりSlackアプリは1つのDBにのみ接続すればよい

→ メタデータクラスタ: ワークスペースをシャードに結び付けるためのルックアップテーブル

→ キッチンシンククラスタ: 特定のワークスペース向けではない、あらゆるデータを保存。Appディレクトリなど

  • シャーディングはモノリスの"webapp"が管理・調整

  • 各クラスタは1つ以上のシャードで構成され、各シャードは別のデータセンターにある少なくとも2つ以上のMySQLインスタンスでプロビジョニング

  • Active-Active設定の利点

→ 高可用性

→ 速いプロダクト開発速度

→ 容易なデバッグ

→ 容易な拡張

しかし、組織が大きくなり、プロダクトチームが新機能を作るようになると開発速度が低下

  • Active-Activeの欠点

→ 拡張の限界: より大きな顧客が増えるにつれ、高性能ホストが収容できる限界に到達

→ 1つのデータモデルへの固定:

Enterprise GridやSlack Connectのような機能が入ることで、1台のサーバーにしか接続しないというパラダイムに反するようになった

→ ホットスポット: データベースフリートをうまく活用できなかった。シャードの分割やチーム移動が難しく、Slackの利用量予測も困難だったため、大半のシャードを過剰にプロビジョニングし、ロングテールを活用しにくかった

→ ワークスペースとシャードの可用性問題: シャードに問題が起きると、そのシャード上のすべての顧客がSlackを利用不能

→ 運用: 一般的なMySQL構成ではなかったため、多くの内部ツールを作成していた

  • 2016年秋、1秒あたり数十万件のMySQLクエリと数千台のシャーディングされたMySQLホストを管理していた

  • 定期的にスケーリングと性能の問題が発生し、新しいアプローチを検討

  • 既存のものを発展させるか新製品を導入するか検討したが

→ 自社クラウドで動くMySQLを引き続き使いたい

→ 数千の固有クエリがあり、その一部は特殊なMySQL構成を利用

→ デプロイ、バックアップ、データウェアハウスETL、コンプライアンスなどがすべてMySQLベース

  • なぜVitessなのか?: アプリおよび運用の要件の大半を満たしていた

→ MySQL Core: VitessはMySQLベース

→ Scalability: MySQLの主要機能とNoSQL DBのスケーラビリティを組み合わせる。組み込みシャーディングにより、特別なロジック追加なしで柔軟に拡張可能

→ Operability: 標準のフェイルオーバーやバックアップなどを自動処理。クラスタ設定に関するメタデータを追跡して一貫性を維持

→ Extensibility: Goベースのオープンソース。広範なテストカバレッジとオープンな開発者コミュニティ

  • 小さな機能からVitessを本番適用

→ 2017年にRSSフィードをSlackチャンネルへ統合する機能を作ってみた

→ 2018年には新規テーブルはすべてVitess上でのみ作成

→ 2019年半ばにはレガシーDBよりVitessでの書き込みの方が多くなった

→ そしてSlackはVitessオープンソースへ継続的に貢献

→ 3年かけて99%をVitessへ移行。今年中に残り1%も完了予定

  • SlackのVitess導入は成功だったのか?

→ 世界各地の複数リージョンで、複数のVitessクラスタが数十のキースペースを運用中

→ キースペースは、ユーザー数・チーム数・チャンネル数に応じて拡張される論理コレクション

→ 柔軟なシャーディングによりSlackをスケールできるようになった

→ COVID-19でSlackのクエリ数が1週間で50%増加

→ 最も忙しいキースペースをVitessの分割ワークフローで水平拡張

→ 以前ならスケーリング不可能でダウンタイムが発生していただろう

2件のコメント

 
xguru 2020-12-14

https://vitess.io/

Vitess : "MySQL向けのシャーディング・ミドルウェア"

  • MySQLとMariaDBをクラウド上で簡単にデプロイ、スケール、管理できるように作られたソリューション

  • Docker(ローカル)とKubernetes上でMySQLシャードを運用・管理

  • アプリケーションはVTGateというプロキシを介してMySQLと通信するのと同じように利用でき、内部ではgRPCでほかのサーバーに接続する方式

 
xguru 2020-12-14

メールサービスのHeyもVitessを使用中

Heyの技術スタック https://ja.news.hada.io/topic?id=2355