
Ich habe das gerade gelesenDigital Ocean-Artikelund fragte mich, ob dieTopologieim letzten Beispiel kann mit nginx implementiert werden.
Ich bin interessiert anwie der Load Balancer mit den beiden dedizierten Cache-Servern umgeht, die NICHT vor den Anwendungsservern liegen. Sie beschreiben den Prozess wie folgt:
- Der Load Balancer überprüft das Cache-Backend, um festzustellen, ob der angeforderte Inhalt zwischengespeichert ist (Cache-Hit) oder nicht (Cache-Miss).
- Bei einem Cache-Treffer: Geben Sie den angeforderten Inhalt an den Load Balancer zurück und springen Sie zu Schritt 7. Bei einem Cache-Fehler: Der Cache-Server leitet die Anforderung über den Load Balancer an das App-Backend weiter.
- Der Load Balancer leitet die Anfrage an das App-Backend weiter.
- Das App-Backend liest aus der Datenbank und gibt den angeforderten Inhalt an den Load Balancer zurück.
- Der Load Balancer leitet die Antwort an das Cache-Backend weiter.
- Cache-Backend speichert den Inhalt im Cache und gibt ihn dann an den Load Balancer zurück
- Der Load Balancer gibt angeforderte Daten an den Benutzer zurück
Ich vermute, dass der Load Balancer die beiden Gruppen in den Upstream-Direktiven haben sollte:
upstream cachebackend {
server cache-1.example.com;
server cache-2.example.com;
}
upstream appbackend {
server app-1.example.com;
server app-2.example.com;
}
und dann innerhalb einer Serverdirektive:
location / {
proxy_pass http://cachebackend;
# if that one is a MISS, request this one:
# proxy_pass http://appbackend;
# and then save the response on the cachebackend
# before returning it to the client
}
Ich möchte wissen, wie ich Nginx anweise, die oben genannten Schritte auszuführen, oder ob das überhaupt möglich ist.
Danke :)
Antwort1
Nginx kann gleichzeitig Lasten ausgleichen und zwischenspeichern. Sie müssen lediglich die Cachezone mithilfe proxy_cache_path
der Direktive konfigurieren und sie dem jeweiligen server {}
oder location {}
mithilfe von zuweisen proxy_cache
. Zusammenfassend lässt sich also sagen, dass die Architektur von Digital Ocean völlig überflüssig erscheint, wenn Nginx sowohl als Lastenausgleich als auch als Cache verwendet wird.