C++、Java、Python、PHP、Rubyのコードを生成

巨大SNSを支える多言語混在RPC開発フレームワーク“Thrift”

全米で第6位のトラフィックを稼ぐ人気SNSサイト「Facebook」のコアモジュール「Thrift」がオープンソースとして公開された（公式ブログ）。ライセンスは独自の「Thrift Software License」（改変や再配布を許容している点はGPL同様のようだ）。Facebookは学生向けSNSとして2004年にスタートし、その後、学生以外にも会員を拡大。2007年2月現在の会員数は1700万人。アップロードされている写真点数は10億枚以上で、1日600万枚の画像がアップロードされるなど、画像共有サイトとして見てもFlickrよりも大きい。そんな急成長した巨大サイトを支えたのは、独自に作り上げた開発フレームワークだったようだ。

多数の言語で開発したモジュールをシームレスに統合

Facebookが、開発フレームワークとして自ら作成したのがThriftだ。“thrift”は「倹約」という意味で、開発コスト（労力）を最小限に抑える、というほどの意味が込められているようだ。その心は、プログラミング言語には、それぞれ向き不向きがあるので、それぞれの課題によって言語を使い分けよう、というものだ。

マーク・スリー氏はブログの中で、「RSSをC++でパースする？ 退屈だね。インメモリのサーチインデックスをPHPで構築する？ 理解を超える！」と書き、「ある言語を使うと、他の開発言語よりも速く、簡単に、エレガントに書けるものというのがある」と指摘する。利用可能なライブラリの種類や機能、性能にも言語ごとに違いがある。それぞれの言語やライブラリが持つ機能的な制限や、使いづらさにイライラするよりも、その課題に適したツールを使いたい――、それがThriftを開発した動機だという。急激なサイトの成長はシンプルなLAMPのアプローチでは対応できなかった、とホワイトペーパーで述べている。

Thriftは、シンプルで汎用的な記述言語を使って、型宣言とRPCのインターフェイス定義を行う。例えば、こんな風に：

service StringCache { void set(1:i32 key, 2:string value), string get(1:i32 key) throws (1:KeyNotFound knf), void delete(1:i32 key) }

この記述からThriftは、C++、Java、Python、PHP、Rubyといった言語のコードを生成する。それぞれの課題をこなすモジュールは、言語の違いを超えて、RPCで互いにシームレスに協調動作する。

Facebookのコアメンバーは上記のホワイトペーパーの中で、こうしたアプローチが可能な既存の方法は、制限が多いか、型宣言の自由度が低いか、あるいはパフォーマンスが十分でなかったという。

（＠IT 西村賢） 情報をお寄せください：