Abgeschnittener exponentieller Backoff

Ein abgeschnittener exponentieller Backoff ist eine Standardstrategie zur Fehlerbehebung für Netzwerkanwendungen, bei der ein Client eine fehlgeschlagene Anfrage regelmäßig noch einmal sendet, wobei die Abstände zwischen den Anfragen immer länger werden. Clients sollten für alle Anfragen an Cloud Storage, die die HTTP-Antwortcodes 5xx und 429 zurückgeben, einschließlich Uploads und Downloads von Daten oder Metadaten, einen abgeschnittenen exponentiellen Backoff verwenden.

Für die folgenden Vorgänge ist es wichtig, die Funktionsweise des abgeschnittenen exponentiellen Backoffs zu verstehen:

Wenn Sie die Google Cloud Platform Console verwenden, sendet die Console in Ihrem Auftrag Anfragen an Cloud Storage und sorgt für die Bearbeitung aller erforderlichen Backoffs.

Beispielalgorithmus

Ein exponentieller Backoff-Algorithmus wiederholt Anfragen exponentiell und verlängert dabei die Wartezeit zwischen zwei Wiederholungen bis zur maximalen Backoff-Zeit. Ein Beispiel:

  1. Senden Sie eine Anfrage an Cloud Storage.

  2. Wenn die Anfrage fehlschlägt, wartet das System 1 + random_number_milliseconds Sekunden und wiederholt dann die Anfrage.

  3. Wenn die Anfrage fehlschlägt, wartet das System 2 + random_number_milliseconds Sekunden und wiederholt dann die Anfrage.

  4. Wenn die Anfrage fehlschlägt, wartet das System 4 + random_number_milliseconds Sekunden und wiederholt dann die Anfrage.

  5. Und so weiter bis zur maximum_backoff-Zeit.

  6. Das System wartet weiter und führt erneute Versuche bis zu einer maximalen Anzahl an Wiederholungsversuchen aus, jedoch ohne den zeitlichen Abstand zwischen zwei Versuchen zu erhöhen.

Dabei gilt:

  • Die Wartezeit beträgt min(((2^n)+random_number_milliseconds), maximum_backoff), wobei bei jeder Ausführung (Anfrage) um 1 erhöht wird.

  • random_number_milliseconds steht für eine zufällige Anzahl von Millisekunden, deren Wert größer oder gleich 1.000 ist. So lassen sich Situationen vermeiden, in denen viele Clients synchronisiert werden und alle gleichzeitig Anfragen wiederholen und diese in synchronisierten Wellen senden. Der Wert von random_number_milliseconds wird nach jeder Anfragewiederholung neu berechnet.

  • maximum_backoff ist normalerweise 32 oder 64 Sekunden lang. Der geeignete Wert hängt vom jeweiligen Anwendungsfall ab.

Sie können das System weitere Wiederholungen ausführen lassen, nachdem die maximum_backoff-Zeit abgelaufen ist. Die Backoff-Zeit muss dabei nicht mehr verlängert werden. Wenn ein Client beispielsweise eine maximum_backoff-Zeit von 64 Sekunden verwendet, kann er nach Erreichen dieses Werts die Anfrage alle 64 Sekunden noch einmal senden. Sie sollten jedoch dafür sorgen, dass er dies nicht unbegrenzt tut.

Wie lange Clients zwischen Wiederholungen warten sollten und wie oft sie versuchen sollten, eine Anfrage ein weiteres Mal zu senden, hängt von Ihrem Anwendungsfall und den Netzwerkbedingungen ab. Mobile Clients einer Anwendung müssen unter Umständen mehr Wiederholungen mit längeren Intervallen ausführen als Desktopclients derselben Anwendung.

Wenn die Anfragewiederholungen nach Überschreiten des Werts maximum_backoff plus einer zusätzlichen Frist für Wiederholungen fehlschlagen, melden oder protokollieren Sie einen Fehler mit einer der Methoden, die unter Support und Hilfe aufgeführt werden.

Beispielimplementierungen

Beispiele für abgeschnittene exponentielle Backoffs mit Cloud Storage:

Beispiele für Backoffs in Clientbibliotheken, die Sie mit Cloud Storage verwenden können:

  • Wiederholungsbibliothek für Python.

  • Google Cloud-Clientbibliotheken für Node.js können Backoff-Strategien automatisch einsetzen, um Anfragen mit dem Parameter autoRetry noch einmal zu senden.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...