Circuit Breaker: когда системе пора перестать пытаться

Recommendation Service лежит.

Но каждый пользовательский запрос всё равно пытается получить рекомендации:

— отправляет запрос; — ждёт timeout; — делает retry; — снова ждёт.

Пользователь тем временем смотрит на spinner и размышляет, у какого конкурента каталог работает быстрее.

Retry полезен, когда сбой кратковременный. Но если сервис действительно недоступен, повторные попытки только увеличивают задержку и создают дополнительную нагрузку.

В этот момент нужен Circuit Breaker — автоматический выключатель между системой и проблемной зависимостью.

У него три состояния.

Closed

Всё работает нормально. Запросы отправляются в Recommendation Service, а Circuit Breaker следит за ошибками и задержками.

Единичный timeout ничего не меняет: сбои случаются. Но если ошибок становится слишком много, выключатель переходит в следующее состояние.

Open

Запросы в Recommendation Service временно не отправляются вообще.

Система не ждёт заведомый timeout и не запускает бессмысленные retry. Она сразу возвращает fallback или продолжает работу без рекомендаций.

Это важно не только для пользователя. Упавший сервис получает время на восстановление, а не новую волну запросов от клиентов, которые очень настойчиво проверяют, не стало ли ему лучше.

Half-open

Через некоторое время Circuit Breaker пропускает несколько пробных запросов.

Если они проходят успешно, соединение возвращается в состояние Closed. Если снова падают — выключатель открывается ещё на один период.

Получается простой цикл:

Closed → ошибок стало слишком много → Open → прошло время → Half-open → сервис восстановился или снова Open.

Но самое интересное здесь не сам паттерн.

Допустим, рекомендации недоступны. Действительно ли из-за этого должен перестать работать весь магазин?

Вместо бесконечного spinner можно:

— скрыть блок рекомендаций; — показать популярные товары; — использовать последние успешно рассчитанные данные; — дать пользователю продолжить покупку без персонализации.

Circuit Breaker отвечает на вопрос: когда перестать обращаться к сломанной зависимости.

А архитектура системы должна ответить на следующий: что делать без неё.

Это уже graceful degradation — способность системы терять часть функций, но сохранять основную ценность для пользователя.

Какая необязательная зависимость у вас сегодня способна положить весь пользовательский сценарий?

Circuit Breaker: когда системе пора перестать пытаться
Recommendation Service лежит | Сетка — социальная сеть от hh.ru Circuit Breaker: когда системе пора перестать пытаться
Recommendation Service лежит | Сетка — социальная сеть от hh.ru