BT

Twitterのスケーリング,新たなピークへ

| 作者: Saul Caganoff , 翻訳者 吉田 英人 投稿日 2013年8月29日. 推定読書時間: 1分未満 |

原文(投稿日:2013/08/26)へのリンク

多くの人々にとってTwitterは,必要不可欠なコミュニケーション手段になった。人も企業も毎日,ますます広く,深くTwitterを利用する現在,そのスケーラビリティはまさに我々すべてにとっての関心事である。今月初めにTwitterは,143,199ツィート/秒という新たなピークロードを経験した上で,中断することなくそれを処理した。現状の定常値である5,700ツィート/秒に比較すると,これは非常に大きな値だ。プラットフォーム技術担当VPのRaffi Krikorian氏は新記録をブログで報告すると同時に,この新たなトラフィックレベルにスケールするために同社が実施した技術的変更について振り返りを行った。

3年前の2010年,ワールドカップ関連のアクティビティによる 2,000ツィート/秒というピークが引き起こした,Twitterの安定性に関する大きな問題が,同社にシステムの再構築の必要性を認識させることになった。そこで実施された技術的レビューの結果,Twitterが世界最大のRuby on Rails実装であること,すべてがひとつのコードベースであること,アプリケーションもエンジニアリングチーム組織もともに,変更の難しいモノシリックな構成であること,などが明らかになった。MySQLのストレージシステムは限界に達しており,ハードウェアはフルに活用されず,度重なる"最適化"によってコードベースは硬直化していた。そのレビュー結果から,Twitterがいくつかの大目標を立てたことをKrikorian氏は報告している – マシン台数を1桁削減すること,クリーンなバウンダリと高いコヒージョン(凝縮度)を持った疎結合のサービス指向アーキテクチャに移行すること,そして小権限のチームによる新機能の迅速なローンチを実現することだ。

TwitterはJVMに移行し,Rubyを捨てた。Rubyの持っている,プロセスレベルの同時並行モデルの限界に達していた同社には,より高いスループットと,ハードウェアリソースの有効利用の可能なプログラミングプラットフォームが必要だったのだ。コードベースをJVMに書き直したことによって,10倍以上の処理能力の向上が実現した。現在ではホスト1台あたり10,000~20,000リクエスト/秒を処理することができる。

アーキテクチャ上で最大の変更は,同社の"代名詞"であるツイートやタイムラインなどのユーザサービスを重視した,サービス指向アーキテクチャへの移行だ。同社の設計アプローチは "契約による設計(design by contract)"に基づいている。インターフェースに関する事前の同意の下に,各チームが独立してそれを実装する方法だ。サービスは自立的かつ自己完結型であり,新たなエンジニアリングチーム構成にもそれが反映されている。また,すべての技術チームが並列処理やフェールオーバ,ロードバランシングなどを標準化された方法で取り扱うために,非同期RPCプラットフォームのFinagleが開発された。

新しいアーキテクチャは,Twitterのエンジニアリングチームの編成にも反映されている。サービスとそれを担当するチームは,いずれも自立的で自己完結型だ。各チームはそれぞれ,独自のインターフェースと問題領域を所有する。誰もシステム全体のエキスパートである必要はないと同時に,全員がツィートのスケーリングを考慮する必要もない。重要な機能はAPIによって抽象化されているので,必要ならば誰でもアクセスすることができる。

しかしながら,モノシリックな構造が改善されたとしても,永続性が大きなボトルネックであることに変わりはない,とKrikorian氏は言う。ひとつだけだったマスタMySQLデータベースは,Gizzardを採用することで,シャーディングされたフォールトトレラントなデータベースの分散フレームワークに置き換えられている。

大規模システムへのスケーリングという共通のテーマに対処する上で,観測可能性と統計値は,システムの管理や最適化作業をサポートするための具体的なデータを提供する,重要なツールである。Twitterの開発プラットフォームには,要求トレースと統計値レポートを非常に簡単に取得できるツールが組み込まれている。

Twitterのスケーリング物語の最後を飾るのは,ランタイム設定とテスト環境のための努力である。Twitterを"Twitterスケール"でテスト可能なのは,実際の環境のみだ。さらに新機能を導入する場合にも,困難なチーム間調整が必要になることがある。そのためTwitterでは,デプロイされた後で新機能をオンにする,Deciderと呼ばれる機構を開発した。機能のデプロイ時には設定を"オフ"にしておく。その後に2値形式(すべて同時)に"オン"にするか,あるいは段階的な操作で徐々にスイッチを入れていけばよい。

全体の結果として,今日のTwitterは,以前よりもスケーラブルで回復力があると同時に,よりアジャイルになっている。トラフィック量は新記録を更新し続けているし,新機能も大きな混乱なくロールアウトされている。Krikorian氏は,Twitterのアーキテクチャ再構築に関する詳細について,引き続き@twitterengを注目するように我々に求めながら,自身のブログ記事を結んでいる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT