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