web-dev-qa-db-ja.com

本番環境では、Apache + mod_wsgiまたはNginx + mod_wsgi?

中規模から大規模に使用するものpython WSGIアプリケーション、Apache + mod_wsgiまたはNginx + mod_wsgi?

どのメモリとCPU時間を必要とする組み合わせですか?
どちらが速いですか?
どちらが他よりも安定していることで知られていますか?

CherryPyのWSGIサーバーを使用することも考えていますが、非常に高負荷のアプリケーションにはあまり適していないと聞いています。これについて何を知っていますか?

:使用していませんPython Webフレームワーク、私は最初からすべてを書きました。
注 ':他の提案も歓迎します。

62
user11617

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は、より予測可能で信頼できる動作を提供します。

74

Nginx mod_wsgiの作者は、Apache mod_wsgi このメーリングリストのメッセージ とのいくつかの違いを説明しています。

16
akaihola

主な違いは、nginxは非常に小さなメモリ空間で多数の接続を処理するように構築されていることです。これにより、多数のアイドル状態のオープン接続が存在する可能性のある接続のような彗星を実行しているアプリに非常に適しています。これにより、メモリフットプリントもかなり小さくなります。

生のパフォーマンスの観点からは、nginxの方が高速ですが、それを決定要素として含めるほど高速ではありません。

Apacheは利用可能なモジュールの領域で利点があり、Apacheはかなり標準的であるという事実があります。使用するWebホストにはすべてインストールされており、ほとんどの技術者はそれに慣れているでしょう。

また、mod_wsgiを使用する場合はwsgiサーバーであるため、cherrypyも必要ありません。

それ以外に、私ができる最善のアドバイスは、両方でアプリを設定してベンチマークを実行することです。

13
Chuck

CherryPyのWebサーバーが行っていることの1つは、純粋なpython Webserver(AFAIK))であることです。これにより、展開が容易になる場合とそうでない場合があります。さらに、それを使用する利点を確認できましたWSGIと静的コンテンツにサーバーを使用しているだけの場合。

(恥知らずなプラグインの警告:私が言及しようとしているWSGIコードを書いた)

カメリア は次のリリースでWSGIをサポートする予定です。すばらしいのは、既成のコードを使用するか、既存のHTTPおよびWSGIコードを使用して独自のコードを作成できることです。

(恥知らずなプラグを終了)

そうは言っても、現在のオプションを考えると、個人的にはおそらくCherryPyを使用するでしょう。構成が最も簡単で、Cコードを理解するよりもpythonコードを理解できるためです。

あなたはそれらをそれぞれ試してみて、それぞれの長所と短所があなたの特定のアプリケーションにとって何であるかを見るのが最善です。

7
Jason Baker