web-dev-qa-db-ja.com

WSGIとNginxを使用したuWSGi

[〜#〜] wsgi [〜#〜] VS WSGI をNginxで使用する場合、誰でも賛否両論を説明してもらえますか。

現在、Djangoウェブサイト用に本番サーバーを構築していますが、WSGIとuWSGIのどちらを使用すべきかを決定できません。各構成の違いを詳しく説明してください。構成は最適にスケーリングする必要がありますか?

前もって感謝します

74
fear_matrix

わかりました、この混乱は、いくつかのソースからの詳細の欠如、これらのプロトコルの命名、およびWSGIが実際に何であるかによるものです。

概要:

  1. WSGIおよびuwsgiAREプロトコルであり、サーバーではありません。負荷分散のためにWebサーバーと通信するために使用され、特に純粋なHTTPが提供できない追加機能を活用するために使用されます。これまでのところ、NginxとCherokeeはこのプロトコルを実装しています。
  2. uWSGIはサーバーであり、実装するプロトコルの1つはWSGIです(uwsgiプロトコルとuWSGIサーバーを混同しないでください)。 WSGIはPython 仕様 です。WSGI仕様にはいくつかの実装があり、アプリケーションサーバー/ Webサーバーだけでなく、それ以外にも使用されることを意図しています。いくつかのWSGIアプリケーションサーバー(つまり、CherryPyは、まだ十分に混乱していない場合は、本番対応のWSGI準拠のWebサーバーをたまたま持っています!).
  3. UwsgiとWSGIの比較は、オレンジとリンゴの比較です。
90
Derek Litz

通常、メインWebサーバーとは別のプロセスでPythonを実行するのが最善です。このように、Webサーバーには静的コンテンツを非常に高速に処理する小さなスレッドがたくさんありますが、別のPythonプロセスは大きくて重量があり、それぞれ独自のPythonインタープリターを実行します。プレーンWSGIは、nginxスレッドの1つ1つを大きなPythonインタープリターで肥大化させるため、悪いです。 flupまたはgunicornまたはuWSGIの背後にあるnginxを使用すると、nginxを解放してコンテンツを提供し、いくつの小さなライトを選択できるため、はるかに優れています。動的コンテンツを提供するために起動するヘビーウェイトPythonスレッドの数とは無関係に、実行するnginxスレッド。現時点では、人々はgunicornに非常に満足しているように見えますが、これらの3つのオプションはどれでもうまくいくはずです。

今後は、負荷が深刻になり始めたときに、Pythonを別のサーバーに移動することもできます。

29
Brandon Rhodes

私はこれをここで信じています http://flask.pocoo.org/docs/deploying/uwsgi/ は混乱を解消する良い答えです。質問はばかげているわけではなく、2つの用語を見て誰もmod_PHPの世界の外で物事がどのように機能するかについて事前情報を持っていない人に起こります(例えば、PHPや人々に対しては何もありません)

このサイトは、nginxの適切な展開例と同様に、何が必要で何が違いであるかを実用的な用語で説明するのに適しています。

15
Abhishek Dujari

このブログ投稿 は、多くのPython WSGIサーバーの非常に詳細な比較であり、最後に要約といくつかの推奨事項があります。

2
Lowe Thiderman