Sobes.tech
Назад к вопросам
Senior
3

Как работает паттерн Circuit Breaker?

Компании, где спрашивали
Octo

Ответ от нейросети

sobes.tech AI

Паттерн Circuit Breaker используется для предотвращения повторных вызовов к неработающему или медленно отвечающему сервису, чтобы избежать излишней нагрузки и ускорить обработку ошибок.

Основные состояния Circuit Breaker:

  • Closed (Закрыт): все запросы проходят как обычно.
  • Open (Открыт): после определённого количества неудач вызовы блокируются сразу, возвращая ошибку без попытки обращения к сервису.
  • Half-Open (Полуоткрыт): спустя некоторое время после открытия, Circuit Breaker пропускает ограниченное число запросов для проверки, восстановился ли сервис.

Принцип работы:

  1. В состоянии Closed счётчик ошибок отслеживает количество неудачных вызовов.
  2. Если ошибок становится слишком много за короткий промежуток, переключается в Open.
  3. В Open все вызовы сразу отклоняются, чтобы дать сервису время восстановиться.
  4. Через таймаут переходит в Half-Open, где тестирует сервис.
  5. Если тестовые вызовы успешны, возвращается в Closed, иначе снова в Open.

Пример на Java с использованием библиотеки Resilience4j:

CircuitBreaker circuitBreaker = CircuitBreaker.ofDefaults("myCircuitBreaker");
Supplier<String> decoratedSupplier = CircuitBreaker
    .decorateSupplier(circuitBreaker, () -> remoteService.call());

Try<String> result = Try.ofSupplier(decoratedSupplier)
    .recover(throwable -> "Fallback response");