Ответ
Circuit breaker — это паттерн проектирования для повышения отказоустойчивости системы. Он предотвращает каскадные сбои, временно блокируя вызовы к неработающему сервису.
Принцип работы:
- Закрыт (Closed) — запросы проходят нормально
- Открыт (Open) — при превышении ошибок, сразу возвращает ошибку
- Полуоткрыт (Half-Open) — пробует пропустить часть запросов
Пример на Go с библиотекой sony/gobreaker:
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "my-service",
Timeout: 5 * time.Second,
})
_, err := cb.Execute(func() (interface{}, error) {
// Вызов внешнего сервиса
resp, err := http.Get("https://api.example.com")
return resp, err
})
Основные параметры:
FailureThreshold— порог ошибок для перехода в OpenSuccessThreshold— успешных запросов для возврата в ClosedTimeout— время в Open перед переходом в Half-Open