physar / LLM Production Ops / Reliabilität, SLOs & Incident

Reliabilität, SLOs & Incident

Einen probabilistischen Dienst betreiben: SLIs/SLOs definieren, Tail-Latenz, graceful degradation, Provider-Rate-Limits als Kapazitätsgrenze, Incident-Response ohne Stacktrace und Provider-Ausfallrisiko.

Reliabilität, SLOs & Incident: einen probabilistischen Dienst betreiben

Einführung · 8 Abschnitte · ~8 Min Lesezeit · Stand

Das Ops in LLMOps

Ein LLM-Feature ist im Betrieb ein besonderer Dienst: Er ist nicht-deterministisch (dieselbe Eingabe, verschiedene Ausgabe), teuer und ratelimitiert, hängt an einem externen Anbieter — und wenn er „falsch“ antwortet, gibt es keinen Stacktrace. Trotzdem gelten die klassischen SRE-Prinzipien: messbare Ziele, Fehler-Budgets, graceful degradation, geübte Incident-Response.

Dieses Modul ist die Brücke zur SRE-Praxis, angewandt auf LLM-Eigenheiten. Es geht nicht um Modellauswahl oder Prompt-Qualität, sondern darum, den fertigen Dienst zuverlässig laufen zu lassen: beobachten, Ziele setzen, unter Last und Ausfall stabil bleiben, im Zwischenfall richtig handeln.

SLIs, SLOs und die Fehler-Taxonomie

Ein SLI (Service Level Indicator) ist eine gemessene Kennzahl deines Dienstes, ein SLO (Service Level Objective) das Ziel darauf — z. B. „99,5 % der Anfragen liefern in unter 8 s eine gültige Antwort“. Ein SLI muss in Echtzeit maschinell messbar sein, sonst kannst du weder alarmieren noch ein Fehler-Budget führen.

Deshalb ist „die Antwort ist inhaltlich falsch“ kein brauchbarer Verfügbarkeits-SLI: Korrektheit erfordert Ground-Truth oder ein (selbst probabilistisches, teures, langsames) Urteil — das gehört ins Offline-Eval und ins Drift-Monitoring, nicht auf den Pager. Der Verfügbarkeits-SLI stützt sich auf einen maschinell prüfbaren Antwort-Vertrag und eine klare Fehler-Taxonomie:

Provider-5xx (500/503)Anbieter-seitiger Fehler, meist transient. Zählt gegen Verfügbarkeit; kandidat für Backoff-Retry.
Rate-Limit (429)Deine Anfrage wurde gedrosselt — ein Kapazitätssignal, kein Defekt. Retry-After beachten.
TimeoutAntwort kam nicht rechtzeitig zurück — hängt an deiner Timeout-Wahl (siehe Tail-Latenz).
Schema-invalide AntwortHTTP 200, aber unbrauchbar: kein valides JSON, leer, abgeschnitten. App-Fehler trotz HTTP-Erfolg.

Ein SLO impliziert ein Fehler-Budget: 99,5 % Ziel = 0,5 % erlaubte Fehler. Das Budget ist Betriebsmittel — es finanziert Deploys und Experimente. Ein 100-%-Ziel ist bei einem probabilistischen, fremd-gehosteten Dienst weder erreichbar noch sinnvoll.

Tail-Latenz: der Median lügt

Generative Aufrufe sind langschwänzig (heavy-tailed): Die Antwortdauer hängt an der erzeugten Token-Zahl, und Retries auf transiente Fehler starten die ganze Generierung neu. Der Median (p50) sieht dann harmlos aus, während p95/p99 weit darüber liegen — und genau diese langsamen Anfragen sind die, die Nutzer als „hängt“ erleben.

Bei Fan-out verschärft sich das: Wartet eine Anfrage auf mehrere Aufrufe, bestimmt der langsamste die Gesamtlatenz — schon moderate p99 einzelner Aufrufe summieren sich („the tail at scale“). Betreibe und alarmiere deshalb gegen p95/p99, nicht gegen Mittelwert oder Median.

Der Timeout ist keine technische Nebensache, sondern eine SLO-/UX-Entscheidung: Er kappt den Schwanz. Zu kurz → viele abgeschnittene Anfragen (die einen Fallback brauchen); zu lang → Nutzer warten, Verbindungen und Kapazität bleiben gebunden. Wähle ihn bewusst am Tail entlang, mit einem definierten Verhalten für die gekappten Anfragen.

Graceful degradation: lieber schwächer als tot

Fällt der Anbieter aus oder ist überlastet, ist ein harter Fehler die schlechteste Antwort — er macht aus einer Teil-Störung eine Voll-Störung. Graceful degradation hält die Kernfunktion teilweise am Leben, statt hart zu scheitern.

  • Cache: vorhandene oder ähnliche Antwort ausliefern statt neu generieren.
  • Kleineres/sekundäres Modell: günstiger, schwächer, aber verfügbar.
  • Statische/regelbasierte Antwort: vordefiniert, für den Notfall.
  • Reduzierter Funktionsumfang: die teure Fähigkeit deaktivieren, den Rest liefern.

Rate-Limits sind deine Kapazitätsgrenze

Anbieter begrenzen dich über RPM (requests per minute) und TPM (tokens per minute) bzw. Quotas. Das ist deine reale Kapazitätsdecke — nicht deine CPU. Mehr Worker oder Concurrency erzeugen gegen ein festes RPM/TPM nur mehr 429er, keine Kapazität.

Ein 429 heißt „langsamer“, nicht „mehr versuchen“. Wer bei 429 sofort und synchron retried, baut einen Retry-Sturm (thundering herd) und verschärft die Drosselung, die er beheben will. Lastspitzen gehören geformt, nicht durchgeprügelt:

  • Queue / Client-seitiger Rate-Limiter: Demand glätten, unter der Decke bleiben.
  • Backpressure: dem Aufrufer signalisieren, langsamer zu senden.
  • Load-Shedding: unwichtige/niedrigpriore Last früh abwerfen, um die wichtige zu schützen.
  • Backoff mit Jitter, `Retry-After` beachten: Retries entzerren, statt sie zu synchronisieren.

Der Incident ohne Stacktrace

„Das System halluziniert seit heute Früh vermehrt“ oder „verweigert plötzlich gültige Anfragen“ — Health-Checks grün, Latenz normal, keine Errors im Log. Ein Qualitäts-Incident produziert kein Crash-Signal, ist aber echter Nutzer-Schaden. Fehlen eines Stacktraces ist nicht die Abwesenheit eines Incidents.

Wie bei jedem Incident gilt: Severity nach Nutzer-Wirkung einstufen und die Blutung zuerst stoppen. Ohne Stacktrace kann die Root-Cause-Analyse lange dauern — also erst mitigieren, dann diagnostizieren. Sichere Mitigation ist der Rücksprung auf einen bekannt-guten Stand (Rollback / Kill-Switch auf Fallback), nicht ein Vorwärts-Fix live.

  1. erkennen
  2. Severity einstufen
  3. mitigieren
  4. diagnostizieren
  5. kommunizieren

Provider-Risiko: ein Anbieter, ein Single Point of Failure

Hängt dein Produkt an einem Anbieter, ist dessen Ausfall dein Ausfall — Retries helfen nicht, wenn die einzige Abhängigkeit komplett weg ist. Eine Multi-Provider-Strategie (ein zweiter Anbieter als Fallback) reduziert dieses Risiko, kostet aber real: Prompt-Parität (Anbieter verhalten sich unterschiedlich), doppelte Evals, eine gepflegte Abstraktion, mehr Kosten.

Deshalb ist es eine Abwägung, kein Automatismus: Ein zweiter Anbieter rechtfertigt sich, wenn das Verfügbarkeitsziel über dem liegt, was ein Anbieter allein liefert, und das Feature geschäftskritisch ist. Ein zweiter API-Key oder eine zweite Region desselben Anbieters ist keine echte Redundanz — der Ausfall ist korreliert.

Zusammenfassung — gleich im Check

Du kennst jetzt die Betriebs-Achsen eines LLM-Dienstes: SLIs/SLOs & Fehler-Taxonomie, Tail-Latenz & Timeout, graceful degradation, Rate-Limits als Kapazitätsgrenze, Incident ohne Stacktrace und Provider-Risiko.

Gelesen ist nicht geprüft: Im Modul entscheidest du die Fälle selbst und siehst danach, wo dein Urteil trägt.

6 Checks starten →

Modul-Aufbau

EINFÜHRUNGReliabilität, SLOs & Incident: einen probabilistischen Dienst betreiben~8 Min
ADR-001SLI-SLOsenior
ADR-002TAIL-LATENCYsenior
ADR-003FALLBACK-DEGRADATIONsolide
ADR-004RATE-LIMIT-CAPACITYsenior
ADR-005QUALITY-INCIDENTprincipal
ADR-006PROVIDER-RISKsenior

Quellen

  1. 01Google SRE Book — Kapitel „Service Level Objectives“ (Beyer, Jones, Murphy, Smith)
  2. 02Google SRE Book — Kapitel „Handling Overload“ & „Addressing Cascading Failures“ (Load-Shedding, Backpressure)
  3. 03Google SRE Book — Kapitel „Managing Incidents“ & „Emergency Response“
  4. 04The Tail at Scale — Dean & Barroso, Communications of the ACM, 2013
  5. 05Exponential Backoff And Jitter — Marc Brooker, AWS Architecture Blog, 2015
  6. 06Release It! — Michael Nygard (Circuit Breaker, Bulkhead, Fail Fast)
  7. 07Google SRE Workbook — Kapitel „Implementing SLOs“ (SLI-Auswahl, Fehler-Budget)
  8. 08Google SRE Book — Kapitel „Service Level Objectives“ (Latenz-Perzentile als SLI)
  9. 09Google SRE Book — Kapitel „Addressing Cascading Failures“ (Graceful Degradation)
  10. 10Release It! — Michael Nygard (Fail Fast, Circuit Breaker, Fallback)
  11. 11Google SRE Book — Kapitel „Handling Overload“ (Load-Shedding, Backpressure)
  12. 12Google SRE Book — Kapitel „Managing Incidents“ (Mitigation vor Root-Cause)
  13. 13Google SRE Book — Kapitel „Emergency Response“ (Severity, Kommunikation)
  14. 14Google SRE Book — Kapitel „Managing Critical State“ & „Addressing Cascading Failures“ (Redundanz, korrelierte Ausfälle)
  15. 15Release It! — Michael Nygard (Bulkhead, Dependency Isolation)

Verfasst von Julian Zentgraf