
Ein API-Aufruf mit 700 Sekunden Laufzeit kann in einer 600-Sekunden-Build-Umgebung nicht zuverlässig enden. So findest du das echte Deadline-Limit, setzt Budgets und verlegst lange Arbeit aus dem Deployment.
Ein Build lädt Daten über eine API, verarbeitet sie und erzeugt statische Seiten. Darf der Request 700 Sekunden warten, die Plattform beendet den Build aber nach 600 Sekunden, ist das Ergebnis unvermeidbar.
Das ist keine zufällige Störung, sondern ein Konflikt von Deadlines. Außerdem teilt sich der Request das Zeitfenster mit Installation, Kompilierung, Schreiben und Upload der Build-Artefakte.
In Produktionssystemen wirken mehrere Timer gleichzeitig:
| Ebene | Beispiel |
|---|---|
| Build-Limit der Plattform | 600 Sekunden |
| CI-Job | 15 Minuten |
| Framework-Datenabruf | 60 Sekunden |
| HTTP-Client | 700 Sekunden |
| Proxy oder Upstream-API | 30 Sekunden |
Die kleinste gültige Deadline beendet die Arbeit. Ein 700-Sekunden-Timeout im Client verlängert keine Plattform, die den Prozess nach 600 Sekunden beendet.
Miss den Beginn des Builds und des Fetches, DNS/Verbindung/Time-to-first-byte, Statuscode, Antwortgröße, Request-ID, Retries und die Komponente, die den finalen Fehler ausgibt. Nutze eine Korrelations-ID, aber protokolliere keine Tokens, Autorisierungsheader oder sensiblen Nutzdaten.
Ein einzelner API-Aufruf darf nicht das gesamte Build-Limit erhalten. Reserviere Zeit für Installation, Ausgabe und Fehlerbehandlung und gib jedem externen Aufruf ein kleineres, bewusstes Budget.
async function fetchJson(url, { timeoutMs = 15_000, ...options } = {}) {
const response = await fetch(url, {
...options,
signal: AbortSignal.timeout(timeoutMs),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
return response.json();
}
Wenn der Aufrufer bereits ein Abbruchsignal besitzt, kombiniere es mit AbortSignal.any() und dem Timeout-Signal.
Wiederholungen helfen bei temporären Netzwerkfehlern, Drosselung und manchen Serverfehlern. Sie schaden, wenn sie einen sicher scheiternden Request nur vervielfachen. Wiederhole nur idempotente Arbeit, nur plausible temporäre Fehler und nur solange das gesamte Zeitbudget reicht. Verwende exponentielles Backoff und Jitter.
Ist ein API-Aufruf länger als das Deployment-Fenster, löst ein höherer Client-Timeout nichts. Entferne lange Arbeit aus dem kritischen Pfad:
Bei einer seltenen, klar begrenzten Aufgabe kann es sinnvoll sein, wenn alle äußeren Limits es erlauben. Für eine in jedem Build langsame externe Quelle, einen Nutzerpfad oder ein festes Plattformlimit ist es keine Lösung.
Ein 700-Sekunden-Fetch in einer 600-Sekunden-Umgebung ist ein Architekturhinweis, kein Tuning-Problem. Mache Daten schneller verfügbar, verwende einen Snapshot oder führe die lange Arbeit außerhalb des Deployments aus.
Noch keine freigegebenen Kommentare sichtbar. Neue Antworten können moderiert werden.