|
カテゴリ:Python
FriendFeed で使われているウェブサーバがオープンソースで Tornade として公開されたらしい。FriendFeed 自体は使ったことがないのだが、Python で書かれているし、記事を見る限り魅力的に見えるので調べてみる。
ちなみに、FriendFeed に関しては、ブログの更新情報は『Friendfeed』で流すことにした や ブログを書いている人が FriendFeed を始めるべき7つの理由 など参照。でも、FriendFeed―すばらしいが誰も使わないアプリになる危険あり とかいうことからなのか、Facebook、ソーシャルアグリゲータのFriendFeedを買収 となり、さらに Facebook、リアルタイムWebサーバ「Tornado」を公開
ということで、Facebook の力を借りるとともにオープンソース化して、注目度もアップという流れなのかな。 Facebook,PythonベースのWebアプリ・フレームワーク「Tornado」発表
他のWebアプリケーション・フレームワークとの性能比較(Facebookによるテスト結果) を見ると、Django,web.py, CherryPy と比べてもパフォーマンスは飛び抜けてよさげ。この数値は Tornade のパフォーマンス によると、2.4GHz 4コアの Opteronプロセッサを搭載したマシンを使用して ab -n 100000 -c 25 http://10.0.1.x/ で計測したもののようだ。「1コアだけ使用した場合でも33%高速なスループットをたたき出しています。」らしい。厳密にいろいろなパターンでやるとどうなるかは別として、ベース部分の性能がよいのは間違いないだろう。比較には Twisted が入ってないな。Twisted って、Twisted Labs. Success Stories を見ると、TweetDeck のバックエンドでも使われているみたい。 FrientFeed で Tornade を本番環境で使うときには、nginx を建ててロードバランサと静的ファイルのサーバを兼ねさせ、その後ろで Tornade ウェブサーバのインスタンスを複数起動しておくという使い方をしているようだ。Tornade のフロントエンドのインスタンス数は、マシンのコア数と同数にしているらしい。 WSGI にも対応しているが、そもそも WSGI がノンブロッキングのリクエストをサポートしていないので、
というところは注意か。 クッキーと、安全なクッキーやクロスサイトリクエストフォージェリからの保護 なども実装されているし、ユーザ認証 の状態を扱うための基本的な部分はあるし、ユーザー認証も Google/Gmail、Facebook、Twitter、Yahoo、FriendFeed などのサードパーティ認証 を使う仕組みがある。 Tornade は GitHub で公開されている ので見てみる。対応している Python のバージョンは、Python 2.5 と 2.6。 インストールは、上記ページからファイルをダウロードあるいは、tornado-0.1.tar.gz をダウンロードして解凍したら、setup.py でビルド、インストールする標準的な形式になっている。
すべての機能を使うためには、PycURL と simplejson のような JSON ライブラリが必要。MacOS X や Ubuntu Linux の場合は下のようにインストールできると書かれている。Solaris 等、他のプラットフォームでも easy_install を使えば同様にインストールできるだろう。
インストールしたあと、demos のディレクトリを見ると、appengine auth blog chat facebook helloworld の 6つのデモがある。cd helloworld; ./helloworld.py を実行したあと、ブラウザで server_ip:8888 を見てみると Hello world と表示される。auth は、Google ID を使った例で ./authdemo.py を実行して同様にポート 8888 でアクセスすると、Google のログイン画面にリダイレクトされて認証を受けて元のサーバにリダイレクトされてくるのだが、受け取ったあとエラーで "500: Internal Server Error" になるな。何がいけないかとりあえず見てない。chat もユーザ認証で Google を使っているのだが、auth と同様。ちゃんと原因を調べてみないとダメだな。 日本語の情報を調べてみると、Tornade ドキュメント翻訳 に公開されている。なんて速さなんだろう。9/11 14時ぐらいにニュースリリースがあって、9/12 4:52 完了宣言なんてびっくり。「文字通り『竜巻のような』勢い」。Tornadoウェブフレームワーク日本語訳ができるまで にあるが、びっくりの早さ。すばらしいというか、恐ろしいというか。感謝して読ませていただく。 Twitter で最初のやりとりが行われたようだ。共同翻訳環境は、Bitbucket + Sphinx (Sphinx ドキュメント翻訳) で、reStructuredText 形式のファイルを翻訳して、Bitbucket 上にリポジトリを作って共有して、最後に Sphinx で HTML ファイルに変換して公開ということのようだ。 ドキュメント環境に Sphinx を使っているプロジェクト は地道に増えているのね。 Tornade の実装では epoll が使われているので Linux だけでしか動かないかというと、他のプラットフォームの場合 select が使われるので動作可能なようだ。ということで Solaris 上で試してみると、とりあえず、helloworld など問題なく動いた。Tornade の ioloop.py を見てみると、TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと の対応のために、Linux で epoll が使えれば epoll を使うようになっているのを確認。使えない場合は select() が使われる。 Solaris の場合、/dev/poll を使えばいいのだろうが Tornade はそこまでは対応してないようだ。ということで、現状で最高性能を出そうと思えば、Linux を使った方がよいということになるかな。 その他、下記も参照。
とりあえず、少し使ってみようかな。 お気に入りの記事を「いいね!」で応援しよう
Last updated
2009.09.13 15:30:50
コメント(0) | コメントを書く
[Python] カテゴリの最新記事
|