中規模から大規模の Python WSGI アプリケーションには、Apache + mod_wsgi または Nginx + mod_wsgi のどちらを使用しますか?
より多くのメモリと CPU 時間を必要とするのはどの組み合わせですか?
どちらが速いですか?
他のものよりも安定していることで知られているのはどれですか?
私も CherryPy の WSGI サーバーを使用することを考えていますが、非常に高負荷のアプリケーションにはあまり適していないと聞きました。これについて何を知っていますか?
注: Python Web フレームワークは使用しませんでした。すべてをゼロから作成しただけです。
注: その他の提案も歓迎します。
4 に答える
nginx / mod_wsgiについては、以下を必ずお読みください。
http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html
nginxはその下にあるイベント駆動型システムであるため、WSGIベースのアプリケーションの場合のようにアプリケーションをブロックするのに有害な動作特性を持っています。最悪のシナリオは、マルチプロセスnginx構成では、一部のnginxワーカープロセスがアイドル状態であっても、ユーザーリクエストがブロックされていることを確認できる場合です。Apache / mod_wsgiにはこの問題はありません。これは、Apacheプロセスは、実際にリクエストを処理するためのリソースがある場合にのみリクエストを受け入れるためです。したがって、Apache / mod_wsgiは、より予測可能で信頼性の高い動作を提供します。
nginx mod_wsgiの作成者は、このメーリングリストメッセージでApachemod_wsgiとのいくつかの違いを説明しています。
主な違いは、nginxは、はるかに小さなメモリスペースで多数の接続を処理するように構築されていることです。これにより、多くのアイドル状態のオープン接続を持つことができる接続のような彗星を実行しているアプリに非常に適しています。これにより、メモリフットプリントもかなり小さくなります。
生のパフォーマンスの観点からは、nginxの方が高速ですが、決定要因として含めるほど高速ではありません。
Apacheには、利用可能なモジュールの領域での利点があり、それがほぼ標準であるという事実があります。あなたが行くどんなウェブホストもそれをインストールするでしょう、そしてほとんどの技術者はそれを非常によく知っているでしょう。
また、mod_wsgiを使用する場合、それはwsgiサーバーであるため、cherrypyも必要ありません。
それ以外に、私ができる最善のアドバイスは、両方の下でアプリをセットアップし、ベンチマークを実行することです。誰が何を言っても、マイレージは異なる可能性があるためです。
CherryPyのWebサーバーが採用していることの1つは、それが純粋なPython Webサーバー(AFAIK)であるということです。これにより、展開が容易になる場合とされない場合があります。さらに、WSGIと静的コンテンツにサーバーを使用しているだけの場合は、それを使用することの利点を理解できました。
(恥知らずなプラグ警告:これから説明するWSGIコードを作成しました)
Kamaeliaは、次のリリースでWSGIをサポートする予定です。すばらしいのは、事前に作成されたものを使用することも、既存のHTTPおよびWSGIコードを使用して独自のコードを作成することもできるということです。
(恥知らずなプラグを終了)
そうは言っても、現在のオプションを考えると、個人的にはCherryPyを使用するでしょう。これは、構成が最も簡単で、CコードよりもPythonコードを理解できるためです。
ただし、それぞれを試して、それぞれの長所と短所が特定のアプリケーションにどのように影響するかを確認することをお勧めします。