Wenn wiederholte Anfragen einen Ausfall verschärfen

Timeouts, begrenzte Wiederholungen und Idempotenz. So breitet sich eine kleine Störung nicht durch das gesamte System aus.

Ein geöffneter Laptop mit Programmcode in einer dunklen Arbeitsumgebung
Fotografie: Aristo Rinjuang / Unsplash

Eine externe API wird langsam und die Anwendung wiederholt Anfragen. Das klingt nach einer sinnvollen Absicherung. Machen jedoch alle Clients gleichzeitig dasselbe, bekommt der überlastete Dienst noch mehr Arbeit. Wiederholungen brauchen Regeln: welche Vorgänge geeignet sind, wie viele Versuche erlaubt sind und wann endgültig Schluss ist.

Ein Timeout begrenzt die Wartezeit

Jeder Aufruf eines entfernten Dienstes braucht begrenzte Verbindungs- und Antwortzeiten. Berücksichtigen Sie außerdem die gesamte Dauer der Benutzeraktion. Wartet ein Kunde auf drei Dienste, können drei lange Einzel-Timeouts eine unzumutbare Verzögerung ergeben. Das Zeitbudget muss für den ganzen Ablauf gelten.

Nach einem Timeout wissen Sie nicht automatisch, ob die Gegenstelle den Vorgang ausgeführt hat. Die Antwort könnte erst nach einem erfolgreichen Schreibzugriff verloren gegangen sein. Bei Zahlungen, Bestellungen oder Nachrichten ist dieser Unterschied entscheidend.

Wiederholen Sie nur sichere Vorgänge

Vorübergehende Nichterreichbarkeit kann einen weiteren Versuch rechtfertigen. Ungültige Eingaben oder fehlende Berechtigungen meist nicht. Verwenden Sie bei Schreibvorgängen den Idempotenzmechanismus der jeweiligen API. Derselbe Schlüssel muss denselben beabsichtigten Vorgang bezeichnen und darf zwischen Versuchen seine Bedeutung nicht ändern.

Begrenzen und verteilen Sie die Versuche

Verlängern Sie die Wartezeit zwischen Versuchen schrittweise und ergänzen Sie einen zufälligen zeitlichen Versatz. So kommen nicht alle Clients im selben Moment zurück. Setzen Sie eine Höchstzahl und eine Gesamtdauer. Liefert der Dienst Retry-After, beachten Sie die Angabe innerhalb des verfügbaren Zeitbudgets.

Prüfen Sie Wiederholungen in mehreren Schichten. Wiederholen SDK, Backend und Warteschlange dieselbe Anfrage, kann sich die Zahl der Aufrufe vervielfachen. Legen Sie fest, welche Schicht zuständig ist, und messen Sie ursprüngliche Anfragen getrennt von weiteren Versuchen.

Planen Sie den Betrieb ohne die Abhängigkeit

Nicht jede Funktion braucht jeden Anbieter. Ein Katalog kann ohne Empfehlungen erreichbar bleiben. Bei einer unverzichtbaren Abhängigkeit helfen eine klare Fehlermeldung und ein sicherer nächster Schritt. Ein Circuit Breaker kann Aufrufe vorübergehend unterbrechen, benötigt aber ein durchdachtes Verhalten bei der Wiederaufnahme.

  • Timeouts für Aufruf und gesamten Vorgang setzen.
  • Idempotenz bei Schreibvorgängen prüfen.
  • Versuche begrenzen und zeitlich streuen.
  • Langsame Antworten, verlorene Antworten und Totalausfall testen.

Was Sie mitnehmen

Wiederholungen ersetzen keine Verfügbarkeit. Sie sind eine begrenzte Hilfe bei vorübergehenden Fehlern, die dem Dienst Zeit zur Erholung geben soll, ohne seine Last zu vervielfachen.

Dokumentation und weiterführende Links

Mgr. Martin Hlavaj, MBA

Softwareentwickler

Alle Artikel

Erfahren Sie frühzeitig von Ausfällen.

Fügen Sie Ihre Website oder API zu UpBot hinzu und bestimmen Sie, wer den Alarm erhält.

Kostenlos überwachen