Gateway-Praxis9 Min. LesezeitQuelle: Admesh 技术团队

429, 5xx und Timeouts: Engineering-Praxis für die Ausfallsicherheit von LLM-Gateways

Upstream-Rate-Limits und -Störungen sind für LLM-Anwendungen der Normalfall, nicht die Ausnahme. Dieser Artikel erläutert die jeweils korrekte Behandlung von 429/5xx/timeout/401, wann automatisch auf einen anderen Kanal gewechselt werden kann, wann auf keinen Fall erneut versucht werden darf und wie doppelte Abrechnung vermieden wird.

Erst klassifizieren, dann über die Behandlung entscheiden

'Bei jedem Fehler dreimal erneut versuchen' ist die häufigste falsche Vorgehensweise. Die Semantik unterschiedlicher Fehlercodes ist völlig verschieden, und die Behandlungsstrategie muss es ebenfalls sein. Die folgende Tabelle zeigt die Strategie, die unser Gateway tatsächlich verwendet, und kann auch als Referenz für Ihre eigene Implementierung dienen.

  • Verbindungsfehler / DNS / TLS: sofort auf den Ausweichkanal wechseln.
  • Timeout (Ausgabe noch nicht begonnen): auf den Ausweichkanal wechseln, höchstens 1–2 Mal.
  • HTTP 429: nach kurzer Abkühlphase auf einen anderen Kanal wechseln und gleichzeitig die Gewichtung dieses Kanals reduzieren.
  • HTTP 5xx: im Fehlerfenster zählen; aufeinanderfolgende Fehler lösen den Circuit Breaker aus.
  • 401 / 403: Problem mit Zugangsdaten oder Berechtigungen; diese deaktivieren und alarmieren, nicht erneut versuchen.
  • Unzureichendes Guthaben: diesen Kanal pausieren und alarmieren.
  • 400 Parameterfehler: nach der Normalisierung direkt an den Kunden zurückgeben, nicht erneut versuchen, nicht abrechnen.
  • SSE nach teilweiser Ausgabe abgebrochen: upstream_stream_error zurückgeben, standardmäßig nicht erneut versuchen.

Warum ein SSE-Abbruch nicht einfach wiederholt werden kann

Sobald eine Streaming-Antwort begonnen hat, Tokens an den Client auszugeben, hat der Upstream bereits Ausgaben erzeugt (und abgerechnet). Wenn das Gateway in diesem Moment stillschweigend auf einen anderen Kanal wechselt und neu beginnt, sieht der Nutzer doppelte Inhalte, und Sie zahlen für beide Ausgaben.

Die richtige Vorgehensweise ist, diesen halben Stream als Teilerfolg zu behandeln: einen Fehlercode zurückgeben, der dem Client mitteilt, dass der Upstream unterbrochen wurde, und es der Geschäftslogik überlassen, ob die bereits vorhandenen Inhalte plus ein Wiederholungshinweis angezeigt oder alles neu gestartet wird.

Circuit Breaker: die Schicht, die wichtiger ist als Wiederholungen

Wiederholungen behandeln eine einzelne Anfrage, ein Circuit Breaker beurteilt den Gesamtzustand über einen Zeitraum. Wenn ein Kanal einen Schwellenwert aufeinanderfolgender Fehler erreicht, wird er direkt als 'offen' markiert, eine Zeit lang erhält er keinen Datenverkehr mehr, dann wird mit einer kleinen Menge Probe-Datenverkehr getestet (halb-offen), und nach einigen erfolgreichen Proben wird er vollständig wiederhergestellt (geschlossen).

Ohne Circuit Breaker drücken Wiederholungen einen bereits ausgefallenen Kanal noch tiefer in die Knie und lassen die durchschnittliche Latenz der Kunden stark ansteigen.

Idempotenz und Abrechnung bei Wiederholungen

  • Nicht-Streaming-Anfragen: Nach einer Wiederholung wird nur die usage des letztlich erfolgreichen Versuchs abgerechnet.
  • Streaming-Anfragen: Der Versuch, der bereits Tokens ausgegeben hat, verursacht real Upstream-Kosten und muss erfasst werden; die Abrechnung darf nicht durch eine Wiederholung ausgeglichen werden.
  • Weisen Sie jeder Nutzeranfrage eine request_id zu, die alle Wiederholungen teilen, sodass später vollständig nachvollzogen werden kann, 'warum dieser Kanal gewählt wurde'.
  • Rückerstattungen/Korrekturen müssen über das Ledger als Buchungen laufen, das Guthaben darf nicht direkt geändert werden.

Was Admesh bereits umsetzt

Die oben beschriebene Strategie ist im Admesh-Gateway Standardverhalten: Zwischen mehreren Upstream-Kanälen desselben public_model wird automatisch gewechselt, jede Routing-Entscheidung wird persistiert, und Kunden können in den Nutzungsprotokollen request_id, das tatsächlich verwendete Modell und den Kanalzustand einsehen; Fehlercodes werden in einem einheitlichen Format zurückgegeben (error.type / error.code / request_id).

Bemerkenswert ist: Das Routing findet nur innerhalb des Kanalpools desselben public_model statt. Nur weil Sie anthropic/xxx anfragen, werden Sie nicht auf das Modell eines anderen Anbieters umgeleitet – ein modellübergreifender Austausch würde die Ausgabequalität direkt verändern, und diese Entscheidung können wir Ihnen nicht abnehmen.

Admesh-Live-Preise (Auszug)

Die Preise stammen aus der Live-Konfiguration von Admesh, in USD pro Million Token. Die vollständige Liste findest du im Modellkatalog.

Admesh.ai-Modellpreisliste: Preise und Kontextfenster für 8 aktivierte Modelle
Modellname und IDKontextfensterPreis eingeben / 1 MAusgabepreis / 1 MCache-Treffer / 1 M
Claude Fable 5anthropic/claude-fable-5
1M$3.25 / 1M$16.25 / 1M$0.325 / 1M
Claude Fable 5.1anthropic/claude-fable-5-1
1M$3.25 / 1M$16.25 / 1M$0.08125 / 1M
Claude Haiku 4.5anthropic/claude-haiku-4-5-20251001
200K$0.325 / 1M$1.625 / 1M$0.0325 / 1M
Claude Haiku 5.5anthropic/claude-haiku-5-5
1M$0.0325 / 1M$0.1625 / 1M$0.00325 / 1M
Claude Opus 4.5anthropic/claude-opus-4-5-20251101
200K$1.625 / 1M$8.125 / 1M$0.1625 / 1M
Claude Opus 4.6anthropic/claude-opus-4-6
1M$1.625 / 1M$8.125 / 1M$0.1625 / 1M
Claude Opus 4.7anthropic/claude-opus-4-7
1M$1.625 / 1M$8.125 / 1M$0.1625 / 1M
Claude Opus 4.8anthropic/claude-opus-4-8
1M$1.625 / 1M$8.125 / 1M$0.1625 / 1M

Die oben genannten Preise sind die Standardpreise pro Einheit für öffentliche Kanäle; die Abrechnung erfolgt auf Basis des tatsächlichen Token-Verbrauchs. Den vollständigen Modellkatalog anzeigen

Fehlercode-Übersicht ansehen →

FAQ

Sollte man bei 429 schlafen oder das Modell wechseln?
Beides ist nicht ideal. Richtig ist, auf einen anderen Kanal desselben Modells zu wechseln oder gemäß der Retry-Zeit in den Antwort-Headern in einer Warteschlange zu warten. Ein direkter Modellwechsel verändert die Ausgabequalität; blindes Schlafen verlangsamt den Gesamtdurchsatz.
Wie lang sollte das Timeout sein?
Zwei getrennt betrachten: Das Verbindungs-Timeout sollte sehr kurz sein (einige Sekunden), da ein Fehler in der Verbindungsphase sofort einen Wechsel erlaubt; das Gesamt-Timeout hängt von der Aufgabe ab, die Generierung langer Texte kann mehrere Dutzend Sekunden dauern. Verwalten Sie diese beiden Dinge nicht mit einem einzigen Wert.
Führen Wiederholungen zu doppelter Abbuchung?
Bei Admesh nicht: Nicht-Streaming-Anfragen werden nach der usage des letztlich erfolgreichen Versuchs abgerechnet; bei Streaming-Anfragen wird der bereits ausgegebene Teil wahrheitsgemäß abgerechnet, und durch einen Kanalwechsel entstehen keine doppelten Kosten. Alle Abrechnungen basieren auf Ledger-Buchungen und können auf der Nutzungsseite einzeln geprüft werden.

Referenzen

Diese Modelle über ein Gateway aufrufen

Admesh bietet eine einheitliche OpenAI-kompatible API: eine Base URL und ein Key für Claude, GPT, DeepSeek und mehr. Neue Konten erhalten Testguthaben ohne Ablaufdatum.