Nginx Lack Nginx Django?

13

Ich habe eine Django-App und möchte Varnish auf einem Server davor einrichten. In einem anderen Serverfehlerthread schlug jemand vor, Nginx vor Varnish zu stellen.

Soll ich Nginx vor Varnish auf dem Caching-Server platzieren? Wenn ja, sollte ich Nginx auf dem App-Server verwenden?

Enrico
quelle

Antworten:

10

Es handelt sich um 1 - 3 Frontend-Server insgesamt, keine große Serverfarm mit Lastenausgleich zwischen den Ebenen?

Wenn Sie Nginx vor Vanish setzen, können Sie die HTTP-Komprimierung im Handumdrehen durchführen. Dies ist eine bewährte Vorgehensweise, auf die jedoch verzichtet werden kann. (Inhalte in Varnish werden häufig nicht komprimiert, sodass ESI Includes funktioniert und Sie nicht mit mehreren zwischengespeicherten Versionen desselben Objekts arbeiten müssen, abhängig von der Übereinstimmung von Header und Browser.)

In Bezug auf Nginx auf dem App-Server - ist Apache mit mod_wsgi nicht die empfohlene und häufigste Methode, um heutzutage neue Django-Installationen bereitzustellen? Mir ist kein zwingender Grund für die Verwendung von nginx / fastcgi über Apache / mod_wsgi für Django bekannt. Sie sollten sich jedoch von einem Django-Experten beraten lassen.

Was Lacke anbelangt, die attraktive Lastausgleichsfunktionen haben, die Nginx nicht bietet, sehe ich nicht, was sie sind? Der Lack hat ein zufälliges und ein Round-Robin-Gleichgewicht. nginx verfügt über Round-Robin, Client-IP und konsistentes Hashing. Ich sehe keinen signifikanten Vorteil für Varnish? Ist es VCL oder Varnish 'anmutiges Konfigurations-Reload oder etwas anderes?

Für ein kleines 1-3 Server Setup würde ich das wohl einfach machen

Lack -> Apache / mod_wsgi / Django

oder vielleicht

Tintenfisch -> Apache / mod_wsgi / Django

und ignorieren Sie die HTTP-Komprimierung der Einfachheit halber, es sei denn, die Bandbreite ist teuer.

Aktualisieren:

Graham Dumpleton hat unten einen wertvollen Kommentar geschrieben. Er erwähnt ein sehr verbreitetes Setup, zum Beispiel ein Blog auf einem VPS oder eine kleine Webfarm ohne Caching:

nginx -> Apache / mod_wsgi / Django

Dies ist aus mehreren Gründen eine sehr gute Lösung:

  1. Einfaches Setup
  2. nginx, das eine hohe Geschwindigkeit und einen minimalen Overhead aufweist, verwaltet das Serving statischer Dateien und die Verbindung zum Browser wird beibehalten.
  3. Django läuft in Graham Dumpletons exzellentem mod_wsgi, der empfohlenen Plattform für Django.

Der Grund, warum ich dies anfangs nicht erwähnte, war, dass für OP anscheinend Varnish erforderlich war, eine sehr leistungsfähige Caching-Lösung. Die Kombination nginx / Apache / mod_wsgi kann kein Caching mit einer Leistung und Flexibilität durchführen, die mit Varnish übereinstimmt.

Jesper M
quelle
2
Sie könnten sogar 'nginx -> Apache / mod_wsgi / Django' verwenden, wie es viele Leute aus verschiedenen guten Gründen tun.
Graham Dumpleton
4
Die andere Sache, die Nginx in diesem Anwendungsfall bereitstellt, den viele nicht realisieren würden, ist, dass Nginx Apache von langsamen Clients isoliert. Dies liegt daran, dass Anforderungsinhalte bis zu einer bestimmten Größe nicht von nginx gestreamt werden. Stattdessen werden Anforderungsheader und -inhalte gepuffert und nur Proxy-Anforderungen, wenn alles vorhanden ist. Dies bedeutet, dass es Apache nur dann übergibt, wenn alle für die Bearbeitung der Anforderung erforderlichen Informationen verfügbar sind. Somit ist Apache / mod_wsgi so schnell wie möglich ausgelastet und Prozesse / Threads werden nicht durch langsame Clients gebunden. Ein gewisses Maß an Pufferung findet auch auf der Rückseite statt, damit Apache auch schneller fertig wird.
Graham Dumpleton
2
@ Abraham Dumpleton: Es ist sehr schön, dich hier zu haben. Ich hoffe, du bleibst hier. :-). In Bezug auf Nginx HTTP Multiplexing / Smart Connection Handling stimme ich voll und ganz zu.
Jesper M
In erster Linie danke ich Jesper und Graham dafür, dass sie sich die Zeit genommen haben, so umfassende Antworten zu schreiben. Ich plane, einen Lastausgleichsserver vor zwei App-Server zu stellen. Ein Server verarbeitet den größten Teil des Datenverkehrs, während der zweite Server hauptsächlich für Failover- und Betatests neuer Funktionen verwendet wird.
Enrico
Lack ist ansprechend, weil ich die volle Kontrolle darüber habe, welche Anfragen an welches Backend gesendet werden. Der Lack überprüft auch den Zustand der Back-End-Server, das Failover ist einfach einzurichten und behandelt langsame / tote Back-Ends ordnungsgemäß (wenn beide Server ausfallen).
Enrico
4

Sie können nginx ohne Lack verwenden, um den Inhalt zu proxyen und zwischenzuspeichern.

Leise
quelle
2
Lack hat einige attraktive Load-Balancing-Funktionen, die Nginx nicht von der Stange
Enrico
4
Welche Funktionen zum Beispiel?
Schweigen
4

Ich benutze Nginx, Varnish und Apache / mod_wsgi / Django erfolgreich. Ich habe mit folgender Konfiguration angefangen:

Nginx -> Apache / mod_wsgi / Django

Nachdem ich festgestellt hatte, dass Apache stark ausgelastet ist, fügte ich Varnish hinzu:

Nginx -> Lack -> Apache / mod_wsgi / Django

Ich benutze Nginx als eine Art "URL-Router". Django-Administratoranforderungen werden direkt von Nginx an Apache gesendet. Client-Anfragen werden von Nginx an Varnish gesendet, das die Anfragen von Apache zwischenspeichert und auch "graced" -Elemente aus dem Cache bereitstellt, wenn die App-Server nicht verfügbar sind.

Mein Nginx-Server stellt bestimmte statische Inhalte auch direkt bereit (z. B. Bilder, CSS- und Javascript-Dateien).

Im Allgemeinen war die Leistung hervorragend. Ich habe ein paar Vorbehalte bemerkt, die ich erwähnen sollte:

  1. Bei einer ausgelasteten Site kann ein Neustart von Varnish zu einem Anstieg der Auslastung auf den App-Servern führen. Daher ist es am besten, Neustarts von Varnish auf ein Minimum zu beschränken. (Varnish scheint kein "reload" wie Nginx / Apache zu haben, bei dem nur die VCL-Dateien neu geladen werden). Umgekehrt hat das erneute Laden einer Nginx-Konfiguration nur minimale Auswirkungen. Aus diesem Grund schreibe ich die meisten URLs um und "route" sie in Nginx.
  2. Lack kann leicht zwischen Nginx und Apache gewechselt werden. Wenn Sie feststellen, dass Ihre App-Server stark ausgelastet sind, kann das Hinzufügen von Firnis auch mit der Standardkonfiguration wirklich einen Unterschied bewirken.
  3. Wenn Sie Varnish verwenden, müssen Sie auf jeden Fall darüber nachdenken, wie Sie mit der Cache-Ungültigkeit umgehen.
  4. Ich habe die Erfahrung gemacht, dass Varnish fehlgeschlagene Backends etwas eleganter handhabt als Nginx (wie Sie bereits erwähnt haben).
David Narayan
quelle
Ich habe noch nie Lack hinter etwas anderem gesehen. Lack ist normalerweise der Load Balancer, der den URL-Router ausführt. Also hast du 2 Webserver und 1 Proxy oder 2 Proxies und 1 Webserver? Q
ioanb7
2

Ich benutze Nginx-> Lack-> uWSGI-> Django

Mechanismus
quelle