
Ich habe einregionale Instanzgruppemit 2 Instanzen, die auf Port 8000 dienen, keine automatische Skalierung aktiviert.
Diese Instanzgruppe ist das Backend einesGlobaler externer Anwendungslastenausgleich.
Der Webserver auf den Instanzen führt Flask aus und die Verarbeitung jeder Anfrage dauert 1 Sekunde:
@app.route("/", methods=["GET"])
def main() -> Response:
sleep(1)
response = jsonify(
success=True,
hostname=gethostname(),
)
response.status_code = 200
response.headers["Access-Control-Allow-Origin"] = "*"
return response
Ich kann das Verhalten bestätigen, indem ich die öffentliche IP des globalen Lastenausgleichs anklicke. Es dauert also 1 Sekunde, bis ich eine Antwort erhalte.
Wenn ich zwei Anfragen gleichzeitig ausführe, erwarte ich, dass jede Anfrage an eine andere Instanz geht, da es zwei Instanzen gibt. Stattdessen gehen sie immer an dieselbe Instanz und werden dort in die Warteschlange gestellt, also:
- Eine Anfrage dauert 1 Sekunde
- Die andere Anfrage dauert 2 Sekunden
Locality load balancing policy
Ich habe versucht, in und zu ändern Round-Robin
, aber das Verhalten ist immer dasselbe.Least-Request
Random
Verstehe ich das richtig, dass Locality load balancing policy
es nur darum geht, welches Backend ausgewählt wird? Wenn ja, wie konfigurieren Sie die Lastausgleichsrichtlinie innerhalb eines Backends (d. h. einer Instanzgruppe)?
Danke
Aufbau
Instanzgruppe
- Regional
- Zielverteilungsform: Gleichmäßig
- [x] Neuverteilung der Instanzen zulassen
- Autoscaling ein: min. 2, max. 2
- Autoscaling-Signal: HTTP-Lastausgleich 100 %
- Initialisierungszeitraum: 60 s
- Gesundheitskontrolle:
- Pfad: /health
- Protokoll: HTTP
- Hafen: 8000
- Intervall: 30 Sek.
- Zeitüberschreitung: 30 Sek.
- Gesunder Grenzwert: 1
- Ungesunde Schwelle: 10
Lastenausgleicher
- Frontend:
- Protokoll: HTTP
- IP-Adresse: xxxx
- Netzwerkstufe: Premium
- HTTP-Keepalive-Timeout: 610 Sekunden
- Routing-Regeln: Alle nicht übereinstimmenden
- Backend-Dienste:
- Endpunktprotokoll: HTTP
- Benannter Port: Web
- Timeout: 300 Sekunden
- Cloud CDN: Deaktiviert
- Protokollierung: Aktiviert (Abtastrate: 1)
- Sitzungsaffinität: Keine
- Timeout für Verbindungsentleerung: 300 Sekunden
- Verkehrspolitik:
- Lokale Lastausgleichsrichtlinie: Round Robin
- Ausreißererkennung: Deaktiviert
- Backend-Sicherheitsrichtlinie: Keine
- Edge-Sicherheitsrichtlinie: Keine
- Identitätsbasierter Proxy: Deaktiviert
- Balancing-Modus: Max. RPS: 1 (pro Instanz)
- Kapazität: 100 %
Prüfen
siege \
--concurrent 1 \
--time 60s \
"http://x.x.x.x"
Mit 2 Knoten:
concurrent=1
: Durchschnitt 1,02 Sek.concurrent=2
: Durchschnitt 1,66 Sek.concurrent=4
: im Durchschnitt 3,35 Sek.concurrent=8
: Durchschnitt 5,54 Sek.
Mit 4 Knoten:
concurrent=1
: Durchschnitt 1,02 Sek.concurrent=2
: Durchschnitt 1,18 Sek.concurrent=4
: im Durchschnitt 2,70 Sek.concurrent=8
: Durchschnitt 3,83 Sek.concurrent=16
: Durchschnitt 7,26 Sek.
Mit 8 Knoten:
concurrent=2
: im Durchschnitt 1,20 Sek.concurrent=4
: im Durchschnitt 1,85 Sek.concurrent=16
: im Durchschnitt 4,40 Sek.concurrent=64
: Durchschnitt 14,06 Sek.concurrent=128
: Durchschnitt 19,04 Sek.
Erwartetes Verhalten
Ich hätte Ergebnisse wie diese erwartet:
- 2 Knoten:
concurrent=1
: 1 Sekconcurrent=2
: 1 Sekconcurrent=4
: ~2 Sek.concurrent=8
: ~4 Sek.
- 4 Knoten:
concurrent=1
: 1 Sekconcurrent=2
: 1 Sekconcurrent=4
: 1 Sekconcurrent=8
: ~2 Sek.concurrent=16
: ~4 Sek.
Aktualisierung 1
Wenn ich zu a wechsle Classic proxy network load balancer
und 100 Anfragen sende:
- 56 gehe zu vm0
- 44 gehe zu vm1
Stattdessen für ein HTTP LB:
- 99 gehe zu vm0
- 1 gehe zu vm1
Antwort1
Bezogen aufGlobaler externer Application Load BalancerGFE (Google Front End) schätzt, welche Backend-Instanzen Kapazitäten zum Empfangen von Anfragen haben. Sie können den freigegebenen Link scannen, um mehr über die Verteilung des Datenverkehrs zu erfahren.
Wenn Sie denken, dass Round-Robin für Sie nicht funktioniert, würde ich vorschlagen,Ausgleichsmoduswobei das Konzept oder die Konfiguration darin besteht, den Verkehr gleichmäßig zu verteilen.
Ich fand auch diesVerknüpfungeine Frage von Stackoverflow, die hinsichtlich der Verwendung des Balancing-Modus hilfreich sein könnte.