2010-11-18 2 views
71

Ok、Tornadoは非ブロッキングで非常に高速で、多くのスタンディングリクエストを簡単に処理できます。Tornadoの使い方と使い方いつそれは役に立たないのですか?

しかし私はそれが銀色の弾丸ではないと思います。私たちが盲目的にDjangoベースのサイトや他のサイトをTornadoで実行しても、パフォーマンスは向上しません。

私はこれの包括的な説明を見つけることができなかったので、私はここでそれを求めている:

  • を使用することを竜巻すべきですか?
  • いつ役に立たないのですか?
  • これを使用する場合は、何を考慮する必要がありますか?
  • 私たちはどのようにしてを非効率にすることができますサイトは竜巻を使用していますか?
  • サーバーとWebフレームワークがあります。 フレームワークはいつ使うべきですか?また、いつ他のフレームワークと置き換えることができますか?

答えて

37

サーバーとWebフレームワークがあります。いつフレームワークを使うべきですか?また、いつ他のフレームワークと置き換えることができますか?

この区別は少しぼやけています。静的ページを提供している場合のみ、lighthttpdのような高速サーバーのいずれかを使用します。他の賢明な、ほとんどのサーバーは、Webアプリケーションを開発するためのさまざまな複雑なフレームワークを提供します。竜巻は良いWebフレームワークです。 Twistedはさらに優れた機能を持ち、優れたネットワーキングフレームワークと見なされます。これは多くのプロトコルをサポートしています。

TornadoとTwistedは、非ブロッキング、非同期Web /ネットワーキングアプリケーション開発をサポートするフレームワークです。

いつ竜巻を使用する必要がありますか? いつ役に立たないのですか? これを使用する場合、何を考慮する必要がありますか?

非同期/ノンブロッキングI/Oは非常に自然なので、I/O集約型で、計算集約型ではありません。ほとんどのWeb /ネットワーキングアプリケーションはこのモデルに適しています。アプリケーションが特定の計算集中型タスクを実行することを要求する場合、それをより良く処理できる他のサービスに委任する必要があります。 Tornado/TwistedはWebサーバーの仕事をすることができますが、Webリクエストに応答します。

竜巻を使用して非効率なサイトを作るにはどうすればよいですか?

  1. それは銀の弾丸ではありませんし、私たちはただやみくもに実行する場合はDjangoをベースまたは他のサイトとの
  2. 阻止紹介事業

しかし、私は推測する任意のもの、計算集約的なタスクを実行します。トルネードではパフォーマンスが向上しません。

パフォーマンスは、通常、完全なWebアプリケーションアーキテクチャの特徴です。アプリケーションが適切に設計されていない場合、ほとんどのWebフレームワークでパフォーマンスを低下させることができます。キャッシングやロードバランシングなどについて考えてみてください。

TornadoとTwistedは、妥当なパフォーマンスを提供し、非常にパフォーマンスの高いWebアプリケーションを構築するのに適しています。ツイストとトルネードの両方についての証言をチェックして、彼らの能力を確認することができます。

+1

ありがとうございました。いくつかの点を明確にしたいだけです:FlaskやDjango bihind Tornadoを使用してアプリケーションのコードを変更せずにすべての利点を得ることができますか? –

+0

はいの場合 - flupでの実行と比較してどのような違いがありますか?ありがとうございました。 –

+0

私はTornadoアプリケーションでRSSフィードを解析したいと思います。あなたはかなり計算集約的だと思いますか? –

4

私は古い質問に答えるのは申し訳ありませんが、私はこの問題に遭遇し、なぜそれ以上の回答がないのか疑問に思っていました。バートJの質問に答えるために:

I would like to parse RSS feeds in the Tornado application. Would you consider that fairly computationally intensive? 

さて、あなたがやっているの解析の種類に、どのようなハードウェアに依存します:)長い時間が長いので、あなたのアプリが対応する0.5秒と言うよりも多くかかった場合、それは遅いように見える - あなたのアプリをプロファイルする。

高速システムの鍵は素晴らしいアーキテクチャーであり、使用しているフレームワーク(Twisted、Tornado、Apache + PHP)ほどの特長はありません。竜巻は非同期の処理スタイルを持っています。それは実際に私の意見では多くのものが取り上げられています。 Node.js、Twisted、およびYawsは、軽量アプローチと非同期処理スタイルのために非常にうまく拡張できる他の非同期Webサーバーの例です。

ので:それは、入ってくるクライアントに応答要求ハンドラを派遣し、その結果、コールバックされるまで、そのクライアントについて考えていないことができるので

When should Tornado be used? 
When is it useless? 

トルネードは、接続の多くを処理するための良いですイベントキューにプッシュされます。だから、その特定の品質のために、たくさんの要求を扱うときにうまくスケールする必要があるときには、Tornadoを使用するべきです。 非同期処理は、機能的なデカップリングと非共有データアクセスを容易にします。それはRESTまたは他のService Oriented Architectureのようなステートレスデザインで本当にうまくスイングします。また、固有のオーバーヘッドを伴うスレッドやプロセスの生成に対処する必要もなく、ロック/ IPCの問題のいくつかを省くことができます。

一方、バックエンドやデータストアがリクエストを処理するのに時間がかかる場合、Tornadoは大きな違いはありません。特に並行設計やWebサービスの実行に役立ちます。コンカレント・アーキテクチャーなので、設計のスケールを容易にし、カップリングを低く抑えることができます。それは少なくともトルネードでの私の経験です。

+0

あなたのサービスで、計算集約的な操作(> 1秒など)がほとんどない場合はどうなりますか?このような処理をノンブロッキングで行うことはまだ可能ですか? – tigeronk2

+0

@ tigeronk2はい、他のスレッド/プロセスで計算を実行する必要があります。 –

関連する問題