Der Circuit Breaker (englisch für Schutzschalter) ist ein Entwurfsmuster der Fehlertoleranz: Er überwacht Aufrufe an einen entfernten Dienst und unterbricht sie automatisch, wenn dieser Dienst ausfällt. So verhindert er, dass ein einzelner Fehler eine ganze Kette von abhängigen Systemen mitreißt (kaskadierender Ausfall).
Die drei Zustände
Ein Circuit Breaker ist ein kleiner Zustandsautomat:
- Closed (geschlossen): Aufrufe laufen normal durch. Fehler werden gezählt.
- Open (offen): Überschreitet die Fehlerrate in einem Messfenster (Sliding Window) einen Schwellwert, schaltet der Brecher auf offen. Aufrufe werden sofort mit einem Fehler beantwortet (Fail Fast), ohne den Ziel-Dienst zu belasten.
- Half-Open (halb geöffnet): Nach einer Abkühlphase lässt der Brecher eine begrenzte Zahl von Testaufrufen durch. Gelingen sie, kehrt er nach Closed zurück; schlagen sie fehl, geht er wieder auf Open.
Warum das Muster wichtig ist
Geprägt wurde das Muster von Michael Nygard in seinem Buch „Release It!" (2007). Es gibt dem ausgefallenen Dienst Zeit zur Erholung, statt ihn mit immer neuen Requests zu überlasten, und sorgt dafür, dass Nutzer schnelle, klare Fehlerantworten bekommen statt Timeouts. Typische Parameter sind Timeout-Werte, Fehlerschwellen und die Länge des Messfensters. Bekannte Implementierungen sind Resilience4j, Hystrix und Sidecar-Proxies wie Envoy im Service Mesh.
Der Circuit Breaker ergänzt die Retry-Logik (aktive Wiederholungsversuche) und die Backpressure (Drosselung des Datenflusses): Der Breaker entscheidet, ob ein Aufruf überhaupt noch versucht werden darf.
Verwandte Grundlagen: Mikroservice, Verteilte Systeme, Resilienz, Load Balancer, Observability, Hochverfügbarkeit.