3262968 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2009.09.13
XML
カテゴリ:Python
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 build
sudo 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 simplejson

Ubuntu 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 を使っているプロジェクト は地道に増えているのね。

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) | コメントを書く



© Rakuten Group, Inc.