Technik · belegte Antwort
Wiederholungsversuche mit exponentiellem Backoff
Exponentieller Backoff ist eine Strategie zur Fehlerbehandlung, bei der die Wartezeit zwischen aufeinanderfolgenden Wiederholungsversuchen einer fehlgeschlagenen Operation exponentiell wächst. Statt in festen Abständen erneut zu versuchen, wartet das System nach jedem Fehlschlag länger, damit sich der empfangende Server von Überlastung oder vorübergehenden Ausfällen erholen kann.
Funktionsweise
Der Prozess beginnt mit einer anfänglichen Wartezeit, zum Beispiel einer Sekunde. Schlägt der erste Wiederholungsversuch fehl, wird die Wartezeit mit einem konstanten Faktor multipliziert, üblicherweise zwei. Der zweite Versuch erfolgt nach zwei Sekunden, der dritte nach vier, der vierte nach acht und so weiter. Diese geometrische Folge setzt sich fort, bis eine maximale Wartezeit oder eine maximale Anzahl an Versuchen erreicht ist. Dann wird die Nachricht als dauerhaft fehlgeschlagen markiert.
Bedeutung für Absender
Diese Methode verhindert, dass ein Absender versehentlich einen Denial-of-Service-Angriff auf einen empfangenden Mailserver ausführt. Schlagen Tausende Nachrichten gleichzeitig fehl und werden alle alle zehn Sekunden erneut versucht, kann die entstehende Traffic-Spitze den Empfänger dauerhaft lahmlegen. Durch das Verteilen der Wiederholungsversuche wahren Absender eine bessere Reputation und erhöhen die Wahrscheinlichkeit, dass sich ein vorübergehender SMTP-Fehler 4xx erledigt, bevor die Nachricht verworfen wird.
Betriebliche Aspekte
Eine wichtige Ergänzung dieser Strategie ist Jitter, also ein kleiner zufälliger Anteil, der zur Wartezeit addiert wird. Ohne Jitter werden mehrere gleichzeitig fehlgeschlagene Anfragen in synchronisierten Wellen wiederholt und erzeugen Traffic-Spitzen. Mit Jitter verteilen sich die Wiederholungsversuche gleichmäßig über das Zeitfenster, was die Infrastruktur zusätzlich entlastet.
Häufige Implementierungsfehler
Entwickler vergessen oft, eine maximale Anzahl an Wiederholungsversuchen oder eine Obergrenze für die Wartezeit festzulegen. Ohne Obergrenze kann die Wartezeit auf Stunden oder Tage anwachsen – eine inakzeptable Latenz für transaktionale E-Mails. Ein weiterer Fehler ist, dauerhafte 5xx-Fehler als wiederholbar zu behandeln: Exponentieller Backoff sollte nur bei vorübergehenden 4xx-Fehlern angewendet werden, etwa bei Rate-Limits oder vorübergehendem Greylisting.
Konkretes Beispiel
Nehmen wir eine transaktionale E-Mail, die über eine API versendet wird. Versuch 1 schlägt mit dem Fehler 421 (Server ausgelastet) fehl. Das System wartet 2 Sekunden. Versuch 2 schlägt fehl; das System wartet 4 Sekunden. Versuch 3 schlägt fehl; das System wartet 8 Sekunden. Bis Versuch 4 erfolgt, hat der empfangende Server seine Warteschlange voraussichtlich abgearbeitet und nimmt die E-Mail an. SendHQ bietet unter https://sendhq.cc/tools kostenlose Tools, mit denen Sie Ihre E-Mail-Infrastruktur effizient verwalten können.
Häufige Fragen von Teams
Was ist der Unterschied zwischen festem und exponentiellem Backoff?
Bei festem Backoff wird unabhängig von der Anzahl der Fehlschläge alle X Sekunden erneut versucht. Exponentieller Backoff vergrößert das Intervall nach jedem Fehlschlag, um die Last auf dem Zielserver zu senken.
Wann sollten Sie mit den Wiederholungsversuchen aufhören?
Brechen Sie ab, wenn ein dauerhafter 5xx-Fehler zurückgegeben wird, die maximale Anzahl an Versuchen erreicht ist oder die Obergrenze der Wartezeit erreicht wird.
Beeinflusst Jitter das exponentielle Wachstum?
Nein, Jitter addiert einen zufälligen Versatz zur berechneten exponentiellen Wartezeit, um synchronisierte Spitzen bei Wiederholungsversuchen mehrerer gleichzeitiger Anfragen zu vermeiden.
Primärquellen
- RFC 5321: Simple Mail Transfer Protocol — RFC-Editor
- M3AAWG Best Common Practices — M3AAWG (Best Practices)