Exponentielle Backoffs

Ein 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 Memorystore for Redis, die HTTP-5xx- und 429-Antwortcodefehler zurückgeben, einen exponentiellen Backoff verwenden.

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

Wenn Sie die Google Cloud Console verwenden, sendet die Console in Ihrem Namen Anfragen an Memorystore for Redis und verarbeitet alle 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 Memorystore for Redis.

  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 n 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 sollte nach jeder Anfragewiederholung neu berechnet werden.

  • 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.

Der maximale Backoff und die maximale Anzahl von Wiederholungsversuchen, die ein Client verwendet, hängen vom 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 Wiederholungsanfragen nach Überschreiten der maximalen Anzahl von Wiederholungsversuchen fehlschlagen, melden oder loggen Sie einen Fehler mithilfe einer der Methoden, die unter Support erhalten aufgeführt sind.