Twitterにおける大規模システム構築、3つの原則
4月に米サンタクララで行われたMySQL Confernce & Expo 211では、TwitterのJeremy Cole氏が「Big and Small Data at @Twitter」と題して、同社のシステムにおける原則とシステム構成について紹介したプレゼンテーションが行われました。
1日に1億5000万以上のツイートが行われているTwitterのシステムはどのように構築されているのか、その内容を紹介しましょう。
Twitterにおける原則
TwitterのJeremy Cole氏。
まず何よりも最初に、このセッションについてツイートしたい人のためにハッシュタグをここで紹介しないとね。
私は2000年からMySQL AB/Incの従業員で、昨年の11月からTwitterで働き始めた。
データの観点で見たTwtterを紹介しよう。
Twitterでは1日に約155ミリオンのツイートが発生している。1週間で1ビリオンになる。
これまでのピークは1秒間に6939ツイート、これは今年の日本のお正月のときのもの。日本人はなぜかTwitterが大好きで、新年の挨拶のときにこれを記録した。
1日に46万の新アカウントが作成されている。
こうした大規模なデータをTwitterがどう扱っているのか、という話をしよう。
原則は「プラグマティズム」「疎結合」「ソフトローンチ」
私はTwitterの全員のエンジニアを代表は出来ないけれど、カルチャーとテクノロジーについて説明しよう。
原則の1つ目として、非常にプラグマティズム(実際的)な方針からスタートしており、コモディティのハードウェア、ソフトウェアを使うようにしている。
その仕事にもっともふさわしいツールを使い、必要なものは開発する。
MySQLが使えるところに使うし、もちろん使っている。実際のところMySQLは多くの場面で非常に有用だ。いろんなコンポーネントなどをFacebookの人たちが積極的にハックしてくれていたりするので、そういうのを使わせてもらったりすることもある(笑)
2つ目の原則は、疎結合(Loose Coupling)だ。非同期処理のためにキューを使っている。
3つめの原則はゆっくりとした立ち上げ(Soft Launches)だ。新しいコードはディスエイブルの状態でローンチし、ゆっくりと有効にしていく。必要なら元に戻したり、特定の割合で有効にしたりする。
これによって、問題があればすぐオフにしてすばやく改善していくことを実現している。
MySQLをどのように使っているか?
Twitterで、どのようにMySQLを使っているのかを紹介しよう。
MySQLはTwitterのコアアーキテクチャとなっている。MySQLを使っている理由は、高速でロバストでレプリケーションも可能だからだ。MySQLはラップトップでも動くし、簡単にデプロイして簡単に使えて簡単にテストもできる。
一方で、大規模なID生成は苦手なので、この部分は外部コンポーネントを開発している。レプリケーションの非効率さもある。
数カ月前にTwitterのユニークIDをより長いものに切り替えたが、SnowflakeはそのIDを生成するものだ。
Gizzardはデータベースのための分散フレームワークで、MySQLの上に構築されている。データのシャーディング、レプリケーション、ジョブスケジュールなどを管理する。
FlockDBは、フォローリストやブロックリストなどIDとIDの関連を管理するものだ。
Gizzardはロードバランスなどの面で完璧ではないかれども、それでもスケーラブルを実現し、マシンに故障があってもそれを切り離すだけで管理者は安心して夜眠れるような管理を実現できている。
Cassandraもいくつかのプロジェクトで使われている。
Hadoopも内部で使っている。Apacheログなど非構造型データなどの分析を行っている。
またVerticaも分析に使っている。SQLで分析できるのでMapReduceのジョブを書かずに簡単に処理を記述できる。
関連記事
PublickeyではTwitterのシステムについて、以前からその仕組みを追ってきました。
- Twitterの大規模システム運用技術、あるいはクジラの腹の中(前編)~ログの科学的な分析と、Twitterの「ダークモード」
- Twitterの大規模システム運用技術、あるいはクジラの腹の中(後編)~Twitterのサブシステム「Unicorn」「Kestrel」「Flock DB」
- Twitter、リアルタイム検索をLuceneで構築。50倍高速に!
- TwitterがBitTorrentで高速にデプロイしている仕組みについて
- Twitterが、Cassandraの本採用を断念。「いまは切り替えの時期ではない」
- Twitterが分散フレームワーク「Gizzard」公開! Scalaで書かれたShardingを実現するミドルウェア
あわせて読みたい
HTML5 vs ネイティブ。モバイルアプリはどちらで開発するべき?(前編) Google I/O 2011
≪前の記事
プリウスがつぶやきでユーザーと会話する。トヨタとセールスフォースが提携