Circuit Breaker is een architecturaal patroon dat helpt om lawine-achtige fouten en de degradatie van gedistribueerde systemen te voorkomen. De essentie is dat een component, verantwoordelijk voor oproepen naar een extern systeem, de succespercentages van de operaties controleert. Wanneer er te veel mislukte pogingen zijn, ‘open’t’ de Circuit Breaker automatisch en gaan verdere oproepen niet door totdat het systeem begint te herstellen.
Voorbeeld: als de microservice Auth niet meer reageert, verstuurt de service Order, met gebruik van Circuit Breaker, tijdelijk geen verzoeken meer, maar geeft onmiddellijk een foutmelding weer, waardoor een hoge belasting op het afhankelijke systeem wordt voorkomen.
Voorbeeldcode in Python (met de pybreaker bibliotheek):
import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=30) @breaker def call_service(): return requests.get("https://api.service.com/data") try: response = call_service() except pybreaker.CircuitBreakerError: print("Service tijdelijk niet beschikbaar. Probeer het later opnieuw.")
Belangrijkste kenmerken:
Is Circuit Breaker hetzelfde als Retry?
Nee. Retry herhaalt de mislukte operaties, Circuit Breaker doorbreekt de reeks oproepen bij een hoog aantal storingen, waardoor het systeem een pauze krijgt. Deze patronen worden vaak gecombineerd: retry binnen, circuit breaker erbuiten.
Moet je Circuit Breaker implementeren tussen eigen microservices die gelijktijdig worden uitgerold?
Ja, als de services kunnen lijden onder foutbestendigheid of netwerkuitval. Niemand is immuun voor configuratiefouten of belasting, zelfs niet jouw microservices.
Is Circuit Breaker alleen nodig voor externe API-integraties?
Nee, dit patroon kan worden toegepast op elke onbetrouwbare interactie, ook binnen je eigen infrastructuur: databases, caches, berichtenqueues.