Architekt systemówProgramista Backend, Architekt Systemów

Czym jest Circuit Breaker na poziomie architektury, kiedy i po co go stosować?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

Circuit Breaker — to wzorzec architektoniczny służący do zapobiegania lawinowym błędom i degradacji rozproszonych systemów. Jego istota polega na tym, że komponent odpowiedzialny za wywołania do zewnętrznego systemu sprawdza powodzenie operacji. Jeśli liczba nieudanych prób staje się zbyt duża, Circuit Breaker automatycznie „rozłącza się” i dalsze wywołania są blokowane, aż system zacznie się odbudowywać.

Przykład: jeśli mikroserwis Auth przestaje odpowiadać, serwis Order, korzystając z Circuit Breaker, tymczasowo nie wysyła zapytań, lecz od razu zwraca błąd, zapobiegając dużemu obciążeniu zależnego systemu.

Przykład kodu w Pythonie (z użyciem biblioteki pybreaker):

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("Serwis tymczasowo niedostępny. Proszę spróbować później.")

Kluczowe cechy:

  • Ogranicza rozprzestrzenianie się awarii i przyspiesza odbudowę systemu.
  • Pozwala na graceful degradation: informuje użytkowników, zamiast zawieszać aplikację.
  • Jest aktualny dla integracji z zawiedzionymi lub przeciążonymi systemami.

Pytania z pułapką.

Circuit Breaker to to samo, co Retry?

Nie. Retry — powtarza nieudane operacje, Circuit Breaker przerywa łańcuch wywołań w przypadku dużej liczby awarii, dając systemowi odpocząć. Te wzorce najczęściej są ze sobą łączone: retry wewnątrz, circuit breaker na zewnątrz.

Czy należy wdrażać Circuit Breaker między własnymi mikroserwisami, które są wdrażane jednocześnie?

Tak, jeśli usługi mogą doświadczać awarii odpornościowych lub błędów sieciowych. Nikt nie jest odporny na błędy konfiguracji lub obciążenia, nawet twoje mikroserwisy.

Czy Circuit Breaker jest potrzebny tylko przy zewnętrznych integracjach API?

Nie, ten wzorzec może być stosowany w każdej niepewnej interakcji, w tym wewnątrz własnej infrastruktury: baz danych, pamięci podręcznej, kolejek wiadomości.