Circuit Breaker wyjaśniony przez awarię
Kilka dni temu napotkałem nieoczekiwany problem.
Frustracja mocno dała mi się we znaki. Chciałem to naprawić. Ciekawość zmusiła mnie do dalszych poszukiwań.
Ponownie usiadłem do problemu. Znalazłem rozwiązanie. Nazywa się ono circuit breaker.
W oprogramowaniu circuit breaker zapobiega sytuacji, w której pojedyncza awaria powoduje zawieszenie całego systemu. Działa on podobnie jak bezpiecznik w Twoim domu.
Circuit breaker posiada trzy stany:
- CLOSED: Wszystko działa. Wszystkie żądania przechodzą. System monitoruje błędy. Jeśli liczba błędów osiągnie limit, obwód zostaje otwarty.
- OPEN: System natychmiast wstrzymuje wszystkie żądania. Daje to usłudze, która uległa awarii, czas na regenerację.
- HALF_OPEN: System dopuszcza kilka żądań testowych. Jeśli zakończą się sukcesem, obwód zostaje zamknięty. Jeśli zakończą się niepowodzeniem, obwód ponownie zostaje otwarty.
Oto prosta implementacja w kodzie:
constructor(failureThreshold, cooldownMs) {
this.failureThreshold = failureThreshold
this.cooldownMs = cooldownMs
this.state = "CLOSED"
this.failureCount = 0