Die Parameter des Connection Draining der Load Balancer für Amazon ECS optimieren - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Die Parameter des Connection Draining der Load Balancer für Amazon ECS optimieren

Um eine Optimierung zu ermöglichen, halten die Clients eine permanente Verbindung zum Container-Service aufrecht. Auf diese Weise können nachfolgende Anfragen von diesem Client die bestehende Verbindung wiederverwenden. Wenn Sie den Datenverkehr zu einem Container anhalten möchten, benachrichtigen Sie den Load Balancer. Der Load Balancer überprüft regelmäßig, ob der Client die aufrechte Verbindung getrennt hat. Amazon ECS überwacht den Load Balancer und wartet darauf, dass der Load Balancer meldet, dass die aufrechte Verbindung getrennt ist (das Ziel befindet sich in einem UNUSED-Status).

Die Zeitspanne, die der Load Balancer darauf wartet, das Ziel in den UNUSED-Status zu versetzen, entspricht der Verzögerung bei der Abmeldung. Sie können den folgenden Load-Balancer-Parameter konfigurieren, um Ihre Bereitstellungen zu beschleunigen.

  • deregistration_delay.timeout_seconds: 300 (Standard)

Wenn Sie einen Service mit einer Antwortzeit unter 1 Sekunde haben, setzen Sie den Parameter auf den folgenden Wert, damit der Load Balancer nur 5 Sekunden wartet, bevor er die Verbindung zwischen dem Client und dem Backend-Service unterbricht:

  • deregistration_delay.timeout_seconds: 5

Anmerkung

Setzen Sie den Wert nicht auf 5 Sekunden, wenn Sie einen Service mit lang anhaltenden Anfragen haben, wie z. B. langsame Datei-Uploads oder Streaming-Verbindungen.

SIGTERM-Reaktionsfähigkeit

Amazon ECS sendet zunächst ein Stoppsignal an die Aufgabe, um zu benachrichtigen, dass die Anwendung beendet und heruntergefahren werden muss. Dieses Signal kann in Ihrem Container-Image mit der STOPSIGNAL-Anweisung definiert werden und wird standardmäßig auf SIGTERM gesetzt. Dann sendet Amazon ECS eine SIGKILL-Nachricht. Wenn Anwendungen den SIGTERM ignorieren, muss der Amazon-ECS-Service warten, bis das SIGKILL-Signal gesendet wird, um den Prozess zu beenden.

Wie lange Amazon ECS auf das Senden der SIGKILL-Nachricht wartet, wird durch die folgende Amazon-ECS-Agentenoption bestimmt:

  • ECS_CONTAINER_STOP_TIMEOUT: 30 (Standard)

    Weitere Informationen zum Container-Agent-Parameter finden Sie unter Amazon ECS Container Agent on GitHub.

Um die Wartezeit zu verkürzen, setzen Sie den Amazon-ECS-Agentenparameter auf den folgenden Wert:

  • ECS_CONTAINER_STOP_TIMEOUT: 2

    Wenn Ihre Anwendung länger als 1 Sekunde benötigt, multiplizieren Sie den Wert mit 2 und verwenden Sie diese Zahl als Wert.

In diesem Fall wartet Amazon ECS 2 Sekunden, bis der Container heruntergefahren wird, und Amazon ECS sendet dann eine SIGKILL-Nachricht, wenn die Anwendung nicht gestoppt wurde.

Sie können den Anwendungscode auch ändern, um das SIGTERM-Signal abzufangen und darauf zu reagieren. Das Folgende ist ein Beispiel in JavaScript:

process.on('SIGTERM', function() { server.close(); })

Dieser Code veranlasst den HTTP-Server, nicht mehr auf neue Anfragen zu lauschen und alle laufenden Anfragen zu beantworten. Dann wird der Prozess Node.js beendet, weil die Ereignisschleife nichts zu tun hat. Wenn der Prozess also nur 500 ms benötigt, um seine laufenden Anfragen abzuschließen, wird er vorzeitig beendet, ohne dass der Stop-Timeout abgewartet und ein SIGKILL gesendet werden muss.