傀儡師の館.Python
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
12月
全1件 (1件中 1-1件目)
1
FriendFeed で使われているウェブサーバがオープンソースで Tornade として公開されたらしい。FriendFeed 自体は使ったことがないのだが、Python で書かれているし、記事を見る限り魅力的に見えるので調べてみる。ちなみに、FriendFeed に関しては、ブログの更新情報は『Friendfeed』で流すことにした や ブログを書いている人が FriendFeed を始めるべき7つの理由 など参照。でも、FriendFeed―すばらしいが誰も使わないアプリになる危険あり とかいうことからなのか、Facebook、ソーシャルアグリゲータのFriendFeedを買収 となり、さらに Facebook、リアルタイムWebサーバ「Tornado」を公開Tornadoは最近Facebookが買収したフィードアグリゲーターFriendFeedが開発したWebアプリケーションサーバ。ノンブロッキング通信をサポートし、FriendFeedの大量の同時アクセスを処理することでリアルタイム機能とサービス維持を支えてきた。「Django」やGoogleのWebアプリケーションフレームワークなどと同じくPythonで開発しているが、スピードと大量のトラフィックの管理に重点をおいているという。ということで、Facebook の力を借りるとともにオープンソース化して、注目度もアップという流れなのかな。Facebook,PythonベースのWebアプリ・フレームワーク「Tornado」発表 テンプレートを用意しており,クッキー,ユーザー認証,セキュリティ,ローカライズ,静的ファイル配信などの機能も備える。Django用テンプレートも使用可能。 他の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 がノンブロッキングのリクエストをサポートしていないので、Tornadoの非同期、ノンブロッキングの機能をアプリケーションで利用することはできなくなります。 @tornado.web.asynchronous(), httpclient モジュール, auth モジュールといったいくつかの機能は、WSGIアプリケーションでは利用できません。というところは注意か。クッキーと、安全なクッキーやクロスサイトリクエストフォージェリからの保護 なども実装されているし、ユーザ認証 の状態を扱うための基本的な部分はあるし、ユーザー認証も Google/Gmail、Facebook、Twitter、Yahoo、FriendFeed などのサードパーティ認証 を使う仕組みがある。Tornade は GitHub で公開されている ので見てみる。対応している Python のバージョンは、Python 2.5 と 2.6。インストールは、上記ページからファイルをダウロードあるいは、tornado-0.1.tar.gz をダウンロードして解凍したら、setup.py でビルド、インストールする標準的な形式になっている。python setup.py buildsudo python setup.py installすべての機能を使うためには、PycURL と simplejson のような JSON ライブラリが必要。MacOS X や Ubuntu Linux の場合は下のようにインストールできると書かれている。Solaris 等、他のプラットフォームでも easy_install を使えば同様にインストールできるだろう。Mac OS X sudo easy_install setuptools pycurl==7.16.2.1 simplejsonUbuntu Linux sudo apt-get install python-pycurl python-simplejsonインストールしたあと、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のドキュメントの日本語訳しました (渋日記@shibu.jp)Pythonって何?という人のためのSphinxインストール入門 (渋日記@shibu.jp)ドキュメント環境に Sphinx を使っているプロジェクト は地道に増えているのね。Tornade の実装では epoll が使われているので Linux だけでしか動かないかというと、他のプラットフォームの場合 select が使われるので動作可能なようだ。ということで Solaris 上で試してみると、とりあえず、helloworld など問題なく動いた。Tornade の ioloop.py を見てみると、TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと の対応のために、Linux で epoll が使えれば epoll を使うようになっているのを確認。使えない場合は select() が使われる。 Solaris の場合、/dev/poll を使えばいいのだろうが Tornade はそこまでは対応してないようだ。ということで、現状で最高性能を出そうと思えば、Linux を使った方がよいということになるかな。その他、下記も参照。FriendFeedで使われているリアルタイムウェブ用Webアプリケーションサーバ「Tornado」(MOONGIFT)Tornado Web Server (Python用Webサーバフレームワーク) (HDEラボ)とりあえず、少し使ってみようかな。
2009.09.13
コメント(0)