TwitterがBitTorrentで高速にデプロイしている仕組みについて

2010年7月20日

Twitterは、同社の何千台ものサーバに対してバイナリをデプロイする場合に、ピア・ツー・ピアシステムのBitTorrentを利用したツール「Murder」を用いていると、7月1日の記事「Twitterの大規模システム運用技術、あるいはクジラの腹の中(後編)~Twitterのサブシステム「Unicorn」「Kestrel」「Flock DB」」で紹介しました。

FacebookでもBitTorrentによる大規模なデプロイが高速に行われていることは、7月16日の記事「Facebook、memcachedに300TB以上のライブデータを置く大規模運用の内側」で紹介しました。

どうやら大規模システムにおけるデプロイではBitTorrentの利用が進んでいるようです。 7月15日付けのTwitter Engineering Blogに、Twitterのエンジニア、Larry Gadea氏による「Murder」に関するエントリ「Murder: Fast datacenter code deploys using BitTorrent」とビデオが投稿されました。Gadea氏はMurderの開発者のようです。

公開されたビデオを基に、BitTorrentがどのような仕組みでデプロイに用いられているのか、見ていくことにしましょう。

大学を卒業してTwitterに入社

Larry Gadea氏が自己紹介。私は6カ月前にカールトン大学を卒業したばかりで、そのあとTwitterにインフラストラクチャーエンジニアとして入社した。

fig

Twitterでは大量のサーバを運用しており、それらのサーバに対してのアップデートは素早く行わなければならい。しかしGitサーバに対するアクセスによってデプロイを行うことには非常に問題があった。

fig

そこでBitTorrentを使ってデプロイする「Murder」というツールを開発をした。Murderは、BitTorrentを包含して内部ネットワーク用にオプティマイズしたもの。これまで約900秒かかっていたデプロイの時間が約12秒になり、75倍も速くなった。

fig

なぜBitTorrentをベースに選んだかといえば、多くのライブラリがあることが理由の1つだ。

fig

ほかの選択肢としてTreedistという方法もあったが、それほど高速ではなかったのと、ツリーの途中でサーバが落ちていると、それ以後に配布されないと問題があった。もちろん、修正することもできるようだが、それほど効果的な方法とは思えなかった。

fig

さて、BitTorrentによるファイルの配布はこのような状況を想像するだろう。つまり、1人がダウンロードしてアップロードしたものを、みんながダウンロードする、という状況だ。

fig

しかしギガビットイーサネットで接続されているわれわれのようなネットワーク環境では、1人からダウンロードし、アップロードしたらまた1人がダウンロードする、という形式のほうが効率がよい。

fig

この場合には、チェーンが非常に長くなるけれども、ファイルはいくつかに分割されていおり、断片ごとの転送が次々に行われ、マシン間がギガビットイーサネットで接続されているために最初から最後までの転送は非常にシンプルで高速に行われる。

具体的な詳細を説明しよう。まず、1つのサーバに新しいファイルが転送される。そして「Capistrano」がRubyAPIによってすべてのサーバに対して「Trackerへ接続せよ」とシグナルを送る(注:Capistranoは、複数のサーバに同時に指令を送ることができるデプロイツール。Trackerは、BitTorrentのダウンロードサイトを教えてくれるサーバのこと)。

fig

TrackerはBitTorrentネットワークの中央管理サーバで、どこからどこへ接続すべきかを管理している。大量のサーバからTrackerへコネクションしに行くが、短いデータを得るだけで短時間で済むため問題ない。

そうしてあるサーバが別のサーバからデータをダウンロードを開始し、全体のダウンロードが終わったら、メインプロセスはCapistranoへ次の指令を聞きに行く。このとき、プロセスはForkして30秒だけシード(ファイルを配布する役割)となる。これは、どこかのサーバが落ちていたときなどのための最適化でもある。

デプロイ用のBitTorrentには、高速なデプロイのために最適化が施されている。まず、タイムアウトまでの時間を5秒から減らし、リトライまでにかかる時間を短くしたことで全体の性能が向上した。また、暗号化をしないことでCPUの利用を減らした。DHT(分散ハッシュテーブル)による管理は停止し、Trackerだけによる管理にした。

fig

Murderはオープンソースで作られており、基本的にはPythonのスクリプトとCapistranoスクリプトでできている。

将来は、もっとインストールを簡単にするとともに、複数のデータセンターを利用したときにもシンプルにデプロイできるような仕組みを入れたいと考えている。

fig

Murderはgithubのサイトで公開されています

Twitter - Murder Bittorrent Deploy System from Larry Gadea on Vimeo.

あわせて読みたい

DevOps 運用・監視 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本