
Ich habe mir viele Backend-Setups bei Amazon Web Services angesehen, insbesondere das von Instagram. Auf derenInstagram Engineering BlogSie haben erwähnt, dass sie einen Elastic Load Balancer vor ihren drei NGINX-Servern haben, die wiederum vor ihren App-Servern laufen, auf denen Django/Gunicorn läuft. Warum ist das so (ist er zum Puffern? Zum Zwischenspeichern?)
Wenn das der Fall ist, wie kann man diese NGINX-Server mit den Django/Gunicorn-App-Servern verbinden?
Antwort1
Wenn ich mir den Instagram-Beitrag ansehe, glaube ich nicht, dass sie Nginx zum Puffern oder Zwischenspeichern verwenden (obwohl ich mich irren könnte). Ich verwende etwas Ähnliches, aber mit HAProxy statt Nginx.
Einige der Gründe, warum wir diesen Ansatz gewählt haben:
- Nginx und HAProxy arbeiten auf Schicht 7, während ELB später auf Schicht 4 liegt. Wenn Sie Dienste auf Schicht 7 benötigen, kann ELB diese nicht bereitstellen
- Angemessene Verbindungsbeendigung, wenn Integritätsprüfungen fehlschlagen. Der ELB kann weiterhin Datenverkehr an HAProxy/Nginx weiterleiten, während der Datenverkehr von der außer Betrieb befindlichen Instanz abgeleitet wird. Siehehttps://forums.aws.amazon.com/message.jspa?messageID=231571
- Sie können die Lastausgleichsebene bei Bedarf live skalieren
- Bessere Metriken über Verkehr und Leistung jeder Instanz hinter der HAProxy/Nginx-Schicht
- ELB kann erkennen, wenn eine HAProxy-Instanz ausgefallen ist, und den Datenverkehr an sie stoppen
Antwort2
Ein paar Punkte, die mir dazu einfallen:
- Es verteilt Anfragen und überwacht den Zustand der Server, sodass die Site auch dann einwandfrei weiter funktioniert, wenn einer Ihrer Nginx-Server abstürzt.
- Amazon führt auf seiner Seite einige Denial-of-Service-Abwehrmaßnahmen durch. Wenn Sie den Lastenausgleich selbst übernehmen, zahlen Sie für den gesamten Datenverkehr, der an Amazon geht. Wenn Amazon einige Angriffe blockiert, die auf Ihren ELB gerichtet sind, zahlen Sie für diesen Teil nicht.
- Ermöglicht Ihnen, die Sicherheitsgruppen der Nginx-Server auf nur den ELB zu beschränken, wodurch sie sicherer werden, als wenn sie für das öffentliche Internet zugänglich wären.