Warum treten api-timeouts bei externen abfragen auf und wie behebe ich das?
#1
Ich stecke gerade in einem kleinen API-Dilemma fest und wollte mal fragen, ob das jemand anders auch so kennt. Bei meinem aktuellen Projekt habe ich eine externe Schnittstelle angebunden, die eigentlich ganz gut dokumentiert ist. Aber jetzt, wo ich echte Last darauf werfe, bekomme ich bei bestimmten Abfragen einfach sporadische Timeouts, ohne dass im Log der anderen Seite irgendwas auffällig wäre. Mein erster Gedanke war natürlich, dass meine eigene Anbindung irgendwie instabil ist. Ich habe schon die Timeout-Werte erhöht und mit Retry-Mechanismen experimentiert, aber das fühlt sich ein bisschen an wie Herumdoktern an den Symptomen. Ich frage mich, ob ich vielleicht einen grundlegenden Aspekt in der Art, wie ich die Abfragen stelle, übersehe.
Zitieren
#2
Das klingt verdammt bekannt. Unter Last sticht die API plötzlich mit Timeouts durch, Logs bleiben ruhig und man fragt sich ob der eigene Code wirklich stabil ist. Vielleicht ist es nicht dein Threading oder deine Retry Logik sondern die Art wie du Abfragen zusammenstellst. Hast du mal probiert Abfragen seriell statt parallel zu schicken oder sie wenigstens zeitlich zu staffeln. Dann könnte die scheinbare Latenz weniger wie ein Fehler erscheinen
Zitieren
#3
Aus analytischer Sicht fällt auf dass Lasttests Concurrency erzeugen. Vielleicht sind Verbindungs Pools oder Keep Alive das Thema. Zu wenige gleichzeitige Verbindungen führen zu Wartezeiten, zu viele führen zu Sperren im Upstream. Ein Blick auf Latenzverteilungen statt Durchschnitt hilft zu beobachten ob Timeouts mit Spitzenlast steigen. Vielleicht hilft ein Backoff und ein durchdachter Retry der Spikes abfedert
Zitieren
#4
Vielleicht ist das Problem kein Fehler im Protokoll sondern Backpressure. Der Upstream kann Anfragen nur langsam bearbeiten und deine Warteschlange klemmt. Dadurch entstehen sporadische Timeouts
Zitieren
#5
Vielleicht ist diese Fragestellung zu eng. Statt immer nur zu fragen wann der Timeout kommt könnte man das Muster selber verändern. Caching asynchrone Verarbeitung oder Batch Verarbeitung statt Endpunkt Abfrage könnte helfen. Die Anwendung wartet nicht auf jede einzelne Antwort sondern konsumiert Ergebnisse aus einer Warteschlange
Zitieren


[-]
Schnellantwort
Nachricht
Geben Sie hier Ihre Antwort zum Beitrag ein.

Bestätigung
Bitte den Code im Bild in das Feld eingeben. Dies ist nötig, um automatisierte Spambots zu stoppen.
Bestätigung
(Keine Beachtung von Groß- und Kleinschreibung)

Gehe zu: