WAF-REL-050 – Circuit Breaker & Timeout Configuration
Beschreibung
Alle ausgehenden HTTP/gRPC-Calls MÜSSEN explizite Timeout-Werte definieren. Kritische Service-Abhängigkeiten MÜSSEN Circuit Breaker implementieren. Retry-Logik MUSS Exponential Backoff mit Jitter verwenden. Connection Pools MÜSSEN maximale Größen definieren. Kein Service darf Default-Timeouts (undefined oder infinite) für externe Calls verwenden.
Rationale
Cascading Failures sind die primäre Ursache großer Cloud-Outages. Ohne Circuit Breaker erschöpft eine langsame Abhängigkeit schrittweise Thread Pools und Connection Pools, bis der abhängige Service selbst ausfällt und die Kaskade sich fortsetzt. Explizite Timeouts verhindern, dass Ressource-Threads ewig auf nicht-antwortende Services warten.
Bedrohungskontext
| Risiko | Beschreibung |
|---|---|
Thread Pool Exhaustion |
Langsame externe API lässt alle Handler-Threads warten → Service vollständig blockiert. |
Connection Pool Depletion |
Geteilter DB-Connection-Pool erschöpft sich → alle abhängigen Services scheitern. |
Retry Storm |
1000 Clients retrien synchron ohne Jitter → 1000x Lastspitze auf degradiertem Service. |
Optionale Dep reißt Hauptservice mit |
Nicht-kritische Enrichment-API ohne Circuit Breaker → Totalausfall statt Feature-Verlust. |
Anforderung
-
Explizite Timeouts für alle ausgehenden Calls (connect + read getrennt)
-
Circuit Breaker für alle kritischen synchronen Abhängigkeiten
-
Retry: maximal 3 Versuche, Exponential Backoff (100ms → 200ms → 400ms), Jitter ±50%
-
Connection Pool: maximale Größe pro Abhängigkeitsklasse definiert
-
Bulkhead: separate Resource Pools für verschiedene Abhängigkeitsklassen
-
Load Balancer: expliziter
idle_timeout– kein Provider-Default
Implementierungsanleitung
-
Timeout-Audit: Alle ausgehenden HTTP-Clients auf explizite Timeout-Werte prüfen
-
Circuit Breaker konfigurieren: Resilience4j, pybreaker, oder Service Mesh
outlierDetection -
Retry konfigurieren:
maxAttempts=3,initialDelay=100ms,multiplier=2,jitter=0.5 -
Connection Pools: Separate HTTP-Client-Instanzen pro Abhängigkeit
-
ALB idle_timeout: Explizit auf API-Latenz abstimmen (typisch 30s für REST APIs)
-
Chaos Test: Circuit Breaker durch Latenz-Injektion validieren
Reifegrad-Abstufung
| Level | Bezeichnung | Kriterien |
|---|---|---|
1 |
Keine Timeouts |
Default/infinite Timeouts für externe Calls. |
2 |
Timeouts konfiguriert |
Connect und Read Timeouts für externe HTTP-Calls definiert. |
3 |
Circuit Breaker + Retry |
CB für alle kritischen Deps; Retry mit Backoff und Jitter; Connection Pools. |
4 |
Bulkheads + Service Mesh |
Bulkhead-Isolation; Istio/Linkerd verwaltet CB deklarativ; Chaos Tests. |
5 |
Adaptive Thresholds |
CB-Schwellenwerte auto-tuned; Request Hedging; vollständige Resilience Matrix. |
Terraform Checks
waf-rel-050.tf.aws.alb-idle-timeout
Prüft: ALB hat expliziten idle_timeout – kein Provider-Default.
| Compliant | Non-Compliant |
|---|---|
|
|
Remediation: idle_timeout explizit setzen. REST APIs: 30s; File Uploads: 300s.
Evidenz
| Typ | Pflicht | Beschreibung |
|---|---|---|
IaC |
✅ Pflicht |
Terraform oder Service Mesh-Konfiguration mit Timeout und Circuit Breaker Settings. |
Config |
✅ Pflicht |
Application-Konfigurationsdateien mit expliziten Timeout-Werten für alle Abhängigkeiten. |
Process |
Optional |
Latenz-Injektions-Testergebnisse mit Circuit Breaker Aktivierung dokumentiert. |