Назад к вопросам
Senior
3
Как работает паттерн Circuit Breaker?
Компании, где спрашивали
Octo
Ответ от нейросети
sobes.tech AI
Паттерн Circuit Breaker используется для предотвращения повторных вызовов к неработающему или медленно отвечающему сервису, чтобы избежать излишней нагрузки и ускорить обработку ошибок.
Основные состояния Circuit Breaker:
- Closed (Закрыт): все запросы проходят как обычно.
- Open (Открыт): после определённого количества неудач вызовы блокируются сразу, возвращая ошибку без попытки обращения к сервису.
- Half-Open (Полуоткрыт): спустя некоторое время после открытия, Circuit Breaker пропускает ограниченное число запросов для проверки, восстановился ли сервис.
Принцип работы:
- В состоянии Closed счётчик ошибок отслеживает количество неудачных вызовов.
- Если ошибок становится слишком много за короткий промежуток, переключается в Open.
- В Open все вызовы сразу отклоняются, чтобы дать сервису время восстановиться.
- Через таймаут переходит в Half-Open, где тестирует сервис.
- Если тестовые вызовы успешны, возвращается в 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");