Versuchen Sie es erneut mit dem Backoff-Muster - AWS Präskriptive Leitlinien

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.

Versuchen Sie es erneut mit dem Backoff-Muster

Absicht

Das Muster „Wiederholung mit Backoff“ verbessert die Stabilität der Anwendung, indem Operationen, die aufgrund vorübergehender Fehler fehlschlagen, transparent wiederholt werden.

Motivierung

In verteilten Architekturen können vorübergehende Fehler durch Dienstdrosselung, vorübergehenden Verlust der Netzwerkkonnektivität oder vorübergehende Nichtverfügbarkeit von Diensten verursacht werden. Das automatische Wiederholen von Vorgängen, die aufgrund dieser vorübergehenden Fehler fehlschlagen, verbessert die Benutzererfahrung und die Stabilität der Anwendung. Häufige Wiederholungsversuche können jedoch die Netzwerkbandbreite überlasten und zu Konflikten führen. Exponentielles Backoff ist eine Technik, bei der Operationen wiederholt werden, indem die Wartezeiten für eine bestimmte Anzahl von Wiederholungsversuchen verlängert werden.

Anwendbarkeit

Verwenden Sie das Muster „Wiederholungsversuch mit Backoff“, wenn:

  • Ihre Dienste drosseln die Anfrage häufig, um eine Überlastung zu vermeiden, was zu einem429 Zu viele AnfragenAusnahme beim Anrufvorgang.

  • Das Netzwerk ist ein unsichtbarer Akteur verteilter Architekturen, und vorübergehende Netzwerkprobleme führen zu Ausfällen.

  • Der aufgerufene Dienst ist vorübergehend nicht verfügbar, was zu Fehlern führt. Häufige Wiederholungsversuche können zu einer Beeinträchtigung des Dienstes führen, sofern Sie nicht mithilfe dieses Musters ein Backoff-Timeout einführen.

Probleme und Überlegungen

  • Idempotenz: Wenn mehrere Aufrufe der Methode die gleiche Wirkung haben wie ein einziger Aufruf auf den Systemstatus, wird die Operation als idempotent angesehen. Operationen sollten idempotent sein, wenn Sie das Muster „Wiederholungsversuch mit Backoff“ verwenden. Andernfalls könnten Teilaktualisierungen den Systemstatus beschädigen.

  • Netzwerk-Bandbreite: Wenn zu viele Wiederholungsversuche die Netzwerkbandbreite beanspruchen, kann es zu einer Beeinträchtigung des Dienstes kommen, was zu langsamen Reaktionszeiten führt.

  • Szenarien, in denen schnell scheitern: Wenn Sie bei nicht vorübergehenden Fehlern die Ursache des Fehlers ermitteln können, ist es effizienter, schnell zu versagen, indem Sie das Schutzschaltermuster verwenden.

  • Rückzahlungsrate: Die Einführung eines exponentiellen Backoffs kann sich auf das Service-Timeout auswirken und zu längeren Wartezeiten für den Endbenutzer führen.

Implementierung

Hochrangige Architektur

Das folgende Diagramm zeigt, wie Service A die Aufrufe von Service B wiederholen kann, bis eine erfolgreiche Antwort zurückgegeben wird. Wenn Service B nach einigen Versuchen keine erfolgreiche Antwort zurückgibt, kann Service A die Wiederholung beenden und dem Anrufer einen Fehler melden.

Hochrangige Architektur für Wiederholungsversuche mit Backoff-Muster

Umsetzung mitAWSDienstleistungen

Das folgende Diagramm zeigt einen Workflow zur Ticketverarbeitung auf einer Kundensupportplattform. Tickets von unzufriedenen Kunden werden beschleunigt, indem die Ticketpriorität automatisch erhöht wird. DerTicket infoDie Lambda-Funktion extrahiert die Ticketdetails und ruft denGet sentimentLambda-Funktion. DerGet sentimentDie Lambda-Funktion überprüft die Meinung des Kunden, indem sie die Beschreibung anAmazon Comprehend(nicht abgebildet).

Wenn der Anruf an dieGet sentimentDie Lambda-Funktion schlägt fehl, der Workflow versucht den Vorgang dreimal erneut.AWS Step Functionsermöglicht exponentielles Backoff, indem Sie den Backoff-Wert konfigurieren können.

In diesem Beispiel werden maximal drei Wiederholungsversuche mit einem Erhöhungsmultiplikator von 1,5 Sekunden konfiguriert. Wenn die erste Wiederholung nach 3 Sekunden erfolgt, erfolgt die zweite Wiederholung nach 3 x 1,5 Sekunden = 4,5 Sekunden, und die dritte Wiederholung erfolgt nach 4,5 x 1,5 Sekunden = 6,75 Sekunden. Wenn der dritte Wiederholungsversuch nicht erfolgreich ist, schlägt der Workflow fehl. Für die Backoff-Logik ist kein benutzerdefinierter Code erforderlich. Sie wird als Konfiguration bereitgestellt vonAWS Step Functions.

Versuchen Sie es erneut mit Backoff-Muster mitAWSDienstleistungen

Beispiel-Code

Der folgende Code zeigt die Implementierung des Musters „Wiederholung mit Backoff“.

public async Task DoRetriesWithBackOff() { int retries = 0; bool retry; do { //Sample object for sending parameters var parameterObj = new InputParameter { SimulateTimeout = "false" }; var content = new StringContent(JsonConvert.SerializeObject(parameterObj), System.Text.Encoding.UTF8, "application/json"); var waitInMilliseconds = Convert.ToInt32((Math.Pow(2, retries) - 1) * 100); System.Threading.Thread.Sleep(waitInMilliseconds); var response = await _client.PostAsync(_baseURL, content); switch (response.StatusCode) { //Success case HttpStatusCode.OK: retry = false; Console.WriteLine(response.Content.ReadAsStringAsync().Result); break; //Throttling, timeouts case HttpStatusCode.TooManyRequests: case HttpStatusCode.GatewayTimeout: retry = true; break; //Some other error occured, so stop calling the API default: retry = false; break; } retries++; } while (retry && retries < MAX_RETRIES); }

GitHubEndlager

Eine vollständige Implementierung der Beispielarchitektur für dieses Muster finden Sie in derGitHubRepositorium beihttps://github.com/aws-samples/retry-with-backoff.

Verwandter Inhalt