WSGI vs uWSGi mit Nginx [geschlossen]


86

Könnte jemand bitte Vor- / Nachteile bei der Verwendung von WSGI VS uWSGI mit Nginx erklären .

Derzeit baue ich einen Produktionsserver für die Django-Website auf, den ich vorbereitet habe, aber nicht entscheiden kann, ob ich mich für WSGI oder uWSGI entscheiden soll. Könnten Sie bitte im Detail erklären, was jede Konfiguration unterscheidet? Welche Konfiguration sollte am besten skaliert werden?

Danke im Voraus


Dieser Blog-Beitrag ist ein sehr detaillierter Vergleich vieler Python-WSGI-Server mit einer Zusammenfassung und einigen Empfehlungen am Ende.
Lowe Thiderman

Und verwendet auch Konfigurationen für einige Server, die wirklich zwielichtig sind und sie schlechter erscheinen lassen, als sie sein können. Man muss vorsichtig sein, was man zu diesem Vergleich liest.
Graham Dumpleton

24
WSGI ist eine Spezifikation. uWSGI bietet eine Implementierung der WSGI-Spezifikation. Sie können sie nicht vergleichen. Sie können nur verschiedene Implementierungen vergleichen.
Graham Dumpleton

Antworten:


100

Ok, Leute, diese Verwirrung ist auf den Mangel an Details aus verschiedenen Quellen und die Benennung dieser Protokolle und das, was WSGI eigentlich ist, zurückzuführen.

Zusammenfassung:

  1. WSGI und uwsgi sind beide Protokolle, keine Server. Es wird verwendet, um mit Webservern für den Lastenausgleich zu kommunizieren und insbesondere um zusätzliche Funktionen zu nutzen, die reines HTTP nicht bieten kann. Bisher haben Nginx und Cherokee dieses Protokoll implementiert.
  2. uWSGI ist ein Server und eines der von ihm implementierten Protokolle ist WSGI (verwechseln Sie das uwsgi-Protokoll nicht mit dem uWSGI-Server). WSGI ist eine Python- Spezifikation . Es gibt mehrere Implementierungen der WSGI-Spezifikation, die nicht nur für Anwendungsserver / Webserver verwendet werden sollen, sondern es gibt auch einige WSGI-Anwendungsserver (z. B. CherryPy, das zufällig auch einen produktionsbereiten WSGI-kompatiblen Webserver hat , wenn du nicht schon genug verwirrt warst!).
  3. Wenn man uwsgi mit WSGI vergleicht, vergleicht man Orangen mit Äpfeln.

3
Tippfehler: "1. uwsgi ist ein Protokoll, kein Server." -> "1. WSGI ist ein Protokoll, kein Server."
Aman

9
Eigentlich ist das, was ich für 1 geschrieben habe, korrekt, aber es ist wahr, dass WSGI sowohl ein Protokoll als auch uwsgi ist, also sind beide Aussagen, die Sie geschrieben haben, korrekt :). Natürlich ohne den Rest des Kontexts von 1. Es ist das Protokoll, das vom uWSGI-Server verwendet wird. wiki.nginx.org/HttpUwsgiModule , - "Verwechseln Sie das uwsgi-Protokoll nicht mit dem uWSGI-Server (der das uwsgi-Protokoll spricht)"
Derek Litz

3
Ah, okay. Ich hatte gedacht, Sie würden versuchen, einen Widerspruch zwischen Aussage 1 zu ziehen. "Wsgi ist ein Protokoll .." und 2. "uwsgi ist ein Server, der das Protokoll implementiert".
Aman

2
@DerekLitz, Auf welchen Servern läuft Django, wenn wir das tun python manage.py runserver?
Piyush S. Wanare

python manage.py runserverist ein in Django integrierter interner Server. Es ist kein Apache, Nginx, Gunicorn oder irgendetwas anderes. django-extensionsbietet eine runserver_plus, die das Werkzeug-Framework verwendet, aber so nah wie möglich an einem Server ist runserver.
Mike DeSimone

31

Im Allgemeinen ist es am besten, Python in einem separaten Prozess von Ihrem Hauptwebserver auszuführen. Auf diese Weise kann der Webserver viele kleine Threads haben, die statische Inhalte sehr schnell bereitstellen, während Ihre separaten Python-Prozesse groß und schwer sind und jeder seinen eigenen Python-Interpreter ausführt. So einfach WSGIist schlecht, weil es jeden einzelnen Ihrer Nginx-Threads mit einem großen Python-Interpreter aufbläht. Die Verwendung von flupoder gunicornoder uWSGIdahinter nginxist viel besser, da dadurch Nginx für die einfache Bereitstellung von Inhalten frei wird und Sie auswählen können, wie viele kleine leichte Nginx-Threads ausgeführt werden sollen, unabhängig davon, wie viele schwere Python-Threads Sie für die Bereitstellung dynamischer Inhalte verwenden. Die Leute scheinen gunicornim Moment sehr zufrieden zu sein, aber jede dieser drei Optionen sollte gut funktionieren.

In Zukunft können Sie den Python auch auf einen anderen Server verschieben, wenn der Ladevorgang ernst wird.


1
Bin ein bisschen verwirrt von deiner Antwort. Ich kann nicht sehen, dass er erwähnt hat, dass irgendeine Art von WSGI-Implementierung innerhalb von nginx ausgeführt wird. Er verwies auf die Hauptseite von wsgi.org. Sein ursprünglicher Vergleich zwischen WSGI und uWSGI ist daher in erster Linie etwas albern, da uWSGI eine Implementierung der WSGI-Spezifikation ist. Sie selbst haben den allgemeinen WSGI-Begriff auf verwirrende Weise verwendet, um zu sagen, dass "jeder einzelne Ihrer Nginx-Threads mit einem großen Python-Interpreter aufgebläht wird". Die WSGI-Spezifikation selbst kann das nicht, nur Implementierungen.
Graham Dumpleton

1
Es könnte sinnvoll sein, nginx + mod_wsgi (das steckbare Modul) und nginx + uWSGI (den Anwendungsserver-Container) zu vergleichen.
Klima

Wenn es darum geht, mit Nginx Python-Webanwendungen auszuführen, da mod_wsgi von Manlio Perillo Deadware ist und nicht empfohlen wird, sind die guten Lösungen entweder WSGI mit Gunicorn oder uWSGI oder FastCGI mit Flup?
Gulbahar

19

Ich glaube, dass dies hier http://flask.pocoo.org/docs/deploying/uwsgi/ eine gute Antwort ist, um die Verwirrung zu beseitigen. Die Frage ist nicht albern, passiert jedem, der die beiden Begriffe sieht und keine vorherigen Informationen darüber hat, wie Dinge außerhalb der mod_PHP-Welt funktionieren (zum Beispiel nichts gegen PHP oder Leute).

Die Site ist gut geeignet, um in praktischen Begriffen zu erklären, was benötigt wird und was der Unterschied ist, sowie ein gutes Bereitstellungsbeispiel für Nginx.


Der Einfachheit halber wird hier die Erklärung aus dem Flask-Wiki zitiert:

uWSGI ist eine Bereitstellungsoption auf Servern wie nginx, lighttpd und cherokee. Weitere Optionen finden Sie unter FastCGI- und Standalone-WSGI-Container. Um Ihre WSGI-Anwendung mit dem uWSGI-Protokoll verwenden zu können, benötigen Sie zuerst einen uWSGI-Server. uWSGI ist sowohl ein Protokoll- als auch ein Anwendungsserver. Der Anwendungsserver kann die Protokolle uWSGI, FastCGI und HTTP bereitstellen.

Der beliebteste uWSGI-Server ist uwsgi, den wir für dieses Handbuch verwenden werden. Stellen Sie sicher, dass es installiert ist, um mitzumachen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.