Anwendung: Liefern Sie responsive und optimierte Bilder im Handumdrehen durch Zuschneiden/Ändern der Größe/Komprimieren von Masterbildern
Aktuelle Belastung: 10.000 Anfragen pro Minute, ~60 MBit/s Datenverkehr.
Aktuelle Konfiguration: NginxPlus LB sitzt an der Spitze. Mehrere App-Server mit nginx->tomcat. Auf jedem App-Server werden Bilder im nginx zwischengespeichert.
Aktuelle Probleme:
- Schlechte Cache-Trefferquote, da der Cache dezentralisiert ist und die Wahrscheinlichkeit gering ist, dass dieselbe Anfrage denselben Server erreicht.
- Doppeltes Caching, obwohl dies toleriert werden kann
- Das Leeren des Caches ist mühsam. Da der Cache möglicherweise auf mehreren Servern vorhanden ist, muss er zum Leeren des Caches von allen App-Servern gelöscht werden.
Potentielle Lösungen
Nginx Load Balancer konsistentes Hashing. Das Problem bei diesem Ansatz ist, dass er zu einer ungleichmäßigen Verkehrsverteilung führen kann
Führen Sie eine mittlere Schicht mit einigen Nginx-Servern ein: Eine dedizierte Nginx-Caching-Schicht kann zwischen LB- und App-Servern eingeführt werden. Aber nehmen wir an, ich behalte 3 Server in dieser Schicht, dann besteht immer noch das gleiche Problem mit doppeltem Caching und Bereinigungsproblemen, wenn auch um Größenordnungen geringer.
Bei einem einzelnen nginx kann die Datenträgereingabe/-ausgabe ein Problem darstellen
Hat jemand Erfahrung mit der Lösung dieses Anwendungsfalls? Auch wenn es nicht mit Nginx ist. Teilen Sie uns gerne Ihre Gedanken mit.