Короткий ответ
Circuit breaker — паттерн, который временно «отключает» вызовы к зависимости после серии сбоев, сразу возвращая ошибку/fallback без реального обращения, давая зависимости время восстановиться.
Как это работает подробнее
Breaker отслеживает частоту ошибок; при превышении порога переходит в состояние «открыт» (вызовы блокируются сразу); после паузы переходит в «полуоткрыт» и пробует тестовые вызовы.
Пример кода
Схема
Состояния: CLOSED -> (много ошибок) -> OPEN -> (таймаут) -> HALF_OPEN -> (успех) -> CLOSED
-> (ошибка) -> OPENЧто использовать на практике
- Практика. Защищает вызывающий сервис от долгого ожидания таймаутов к уже деградировавшей зависимости и предотвращает усиление нагрузки на неё.
Подводные камни
- Риск. Путать circuit breaker с retry (это разные, дополняющие друг друга механизмы); не предусматривать осмысленный fallback при открытом breaker'е.