Aufbau

Aufbau

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 policyIch habe versucht, in und zu ändern Round-Robin, aber das Verhalten ist immer dasselbe.Least-RequestRandom

Verstehe ich das richtig, dass Locality load balancing policyes 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 Sek
    • concurrent=2: 1 Sek
    • concurrent=4: ~2 Sek.
    • concurrent=8: ~4 Sek.
  • 4 Knoten:
    • concurrent=1: 1 Sek
    • concurrent=2: 1 Sek
    • concurrent=4: 1 Sek
    • concurrent=8: ~2 Sek.
    • concurrent=16: ~4 Sek.

Aktualisierung 1

Wenn ich zu a wechsle Classic proxy network load balancerund 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.

verwandte Informationen