Три состояния
- Closed (нормальная работа) — запросы проходят. Счётчик отказов растёт при ошибках
- Open (выключатель сработал) — запросы блокируются, сразу возвращается fallback. Устанавливается когда отказов > порог
- Half-Open (проверка) — после timeout пропускается один тестовый запрос. Если успешно → Closed, если нет → обратно в Open
Зачем
Без circuit breaker: медленный сервис A → потоки сервиса B зависают в ожидании → сервис B исчерпывает thread pool → падает весь кластер. Circuit breaker «отключает» сервис A и даёт остальной системе продолжить работу.