FriendFeedで使われているリアルタイムウェブ用Webアプリケーションサーバ「Tornado」
TornadoはPython製のオープンソース・ソフトウェア。ここ半年くらいで盛り上がりを見せているワードが「リアルタイムウェブ」だ。Twitterのようなリアルタイム検索やFriendFeedのようなソーシャルアグリゲートサービスをはじめ、多数のサービスがこのリアルタイムウェブに向かって突き進んでいる。
サンプルアプリケーションのブログ
そこで使われているWebサーバにはこれまでとは違うニーズが発生する。Tornadoはまさにリアルタイムウェブのために作られた、Webアプリケーションサーバだ。
TornadoはFriendFeedが自社のサービスを支えるために開発したWebアプリケーションサーバだ。ノンブロッキング通信をサポートし、epoll(I/Oイベント通知)を使って同時に1,000ものコネクションをさばくことができる。さらにロングポーリング(Long Polling)やHTTPストリーミングにも対応する。
コードの例
パフォーマンスは高く、1秒間のリクエスト数がPythonで有名なweb.py + Apache + mod_wsgiが2066、Django + Apache + mod_wsgiが2223なのに対してTornadoは1つのフロントエンドの場合で3353、nginxと組み合わせた4つのフロントエンドを立てた場合で8213ものリクエストに応えることができるとのこと。
Cookieや非同期リクエスト、外部認証(Facebook、Twitter、Google)にもOAuthやOpenIDを使って対応する。Facebookアプリケーションを開発するのにも最適とのことだ。さらにGoogle App Engineにも対応している。
リアルタイムウェブでは定常的に多数のコネクションが発生しやすい。これまでのWebサーバのあり方で考えていると、思わぬしっぺ返しを食うことにもなるだろう。リアルタイムウェブを本気で考えるなら、実践でもまれたTornadoを研究するのが良いだろう。
チャットのデモ
Tornado Web Server