Twitterにおける大規模システム構築、3つの原則

2011年5月24日

4月に米サンタクララで行われたMySQL Confernce & Expo 211では、TwitterのJeremy Cole氏が「Big and Small Data at @Twitter」と題して、同社のシステムにおける原則とシステム構成について紹介したプレゼンテーションが行われました。

1日に1億5000万以上のツイートが行われているTwitterのシステムはどのように構築されているのか、その内容を紹介しましょう。

Twitterにおける原則

TwitterのJeremy Cole氏。

fig

まず何よりも最初に、このセッションについてツイートしたい人のためにハッシュタグをここで紹介しないとね。

fig

私は2000年からMySQL AB/Incの従業員で、昨年の11月からTwitterで働き始めた。

fig

データの観点で見たTwtterを紹介しよう。

Twitterでは1日に約155ミリオンのツイートが発生している。1週間で1ビリオンになる。

fig

これまでのピークは1秒間に6939ツイート、これは今年の日本のお正月のときのもの。日本人はなぜかTwitterが大好きで、新年の挨拶のときにこれを記録した。

fig

1日に46万の新アカウントが作成されている。

fig

こうした大規模なデータをTwitterがどう扱っているのか、という話をしよう。

原則は「プラグマティズム」「疎結合」「ソフトローンチ」

私はTwitterの全員のエンジニアを代表は出来ないけれど、カルチャーとテクノロジーについて説明しよう。

原則の1つ目として、非常にプラグマティズム(実際的)な方針からスタートしており、コモディティのハードウェア、ソフトウェアを使うようにしている。

その仕事にもっともふさわしいツールを使い、必要なものは開発する。

MySQLが使えるところに使うし、もちろん使っている。実際のところMySQLは多くの場面で非常に有用だ。いろんなコンポーネントなどをFacebookの人たちが積極的にハックしてくれていたりするので、そういうのを使わせてもらったりすることもある(笑)

fig

2つ目の原則は、疎結合(Loose Coupling)だ。非同期処理のためにキューを使っている。

fig

3つめの原則はゆっくりとした立ち上げ(Soft Launches)だ。新しいコードはディスエイブルの状態でローンチし、ゆっくりと有効にしていく。必要なら元に戻したり、特定の割合で有効にしたりする。

これによって、問題があればすぐオフにしてすばやく改善していくことを実現している。

fig

MySQLをどのように使っているか?

Twitterで、どのようにMySQLを使っているのかを紹介しよう。

MySQLはTwitterのコアアーキテクチャとなっている。MySQLを使っている理由は、高速でロバストでレプリケーションも可能だからだ。MySQLはラップトップでも動くし、簡単にデプロイして簡単に使えて簡単にテストもできる。

fig

一方で、大規模なID生成は苦手なので、この部分は外部コンポーネントを開発している。レプリケーションの非効率さもある。

fig

数カ月前にTwitterのユニークIDをより長いものに切り替えたが、SnowflakeはそのIDを生成するものだ。

fig

Gizzardはデータベースのための分散フレームワークで、MySQLの上に構築されている。データのシャーディング、レプリケーション、ジョブスケジュールなどを管理する。

fig

FlockDBは、フォローリストやブロックリストなどIDとIDの関連を管理するものだ。

fig

Gizzardはロードバランスなどの面で完璧ではないかれども、それでもスケーラブルを実現し、マシンに故障があってもそれを切り離すだけで管理者は安心して夜眠れるような管理を実現できている。

Cassandraもいくつかのプロジェクトで使われている。

fig

Hadoopも内部で使っている。Apacheログなど非構造型データなどの分析を行っている。

fig

またVerticaも分析に使っている。SQLで分析できるのでMapReduceのジョブを書かずに簡単に処理を記述できる。

fig

関連記事

PublickeyではTwitterのシステムについて、以前からその仕組みを追ってきました。

あわせて読みたい

プログラミング言語 Twitter システム開発




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本