Resilience Patterns: Timeout, Retry, Circuit Breaker

Fehler in verteilten Enterprise-Systemen begrenzen: Bulkhead, Backpressure, Fallback und Idempotenz.

Version 2BetriebCodeDiagramm
Diagramm Resilience Patterns: Timeout, Retry, Circuit Breaker
Fachlich-technische Darstellung zu Resilience Patterns: Timeout, Retry, Circuit Breaker.

Teilfehler sind normal

Remote APIs, Broker und Datenbanken können langsam, partiell gestört oder nur für bestimmte Operationen fehlerhaft sein. Resilience verhindert, dass ein Fehler das ganze System mitreißt.

Timeout vor Retry

Jeder Retry braucht ein Zeitbudget und Idempotenz. Ohne Timeout verstärkt Retry die Last. Ohne Idempotenz erzeugt Retry doppelte Geschäftsvorfälle.

Fallback darf nicht lügen

Ein Fallback kann degradieren, aber er darf keinen fachlichen Erfolg vortäuschen. Wenn Zahlung unklar ist, sollte die Bestellung auf WAITING_FOR_PAYMENT stehen, nicht APPROVED.

Entscheidungen

EntscheidungGute PraxisPrüffrage
Fachliche GrenzeZuerst Use Case, Invariante und Verantwortlichkeit klären.Welche Geschäftsentscheidung wird geschützt?
Technische GrenzeFramework-/Library-Code hinter Port, Adapter oder Konfiguration kapseln.Kann die Domain ohne Framework getestet werden?
BetriebTimeouts, Logs, Metriken, Traces, Security und Rollback definieren.Wie erkennt der Betrieb Fehler rechtzeitig?

Ausführliche Beispiele

Resilience-Konfiguration
resilience4j:
  timelimiter:
    instances:
      payment:
        timeout-duration: 2s
  retry:
    instances:
      payment:
        max-attempts: 2
        wait-duration: 100ms
  circuitbreaker:
    instances:
      payment:
        failure-rate-threshold: 50
        sliding-window-size: 20
Fallback mit fachlichem Zustand
public PaymentDecision reservePayment(Order order) {
    try {
        return paymentClient.reserve(order.paymentRequest());
    } catch (TimeoutException ex) {
        return PaymentDecision.pending("PAYMENT_TIMEOUT");
    }
}

Typische Stolperfallen

StolperfalleWarum gefährlich
Retry bei Zahlung ohne Idempotency-KeyDoppelte Reservierung möglich.
Circuit Breaker ohne MetrikNiemand versteht, warum Calls blockiert werden.
Bulkheads fehlenEin langsamer Partner verbraucht alle Threads.
⌂ Cockpit