Один
CircuitBreaker умеет работать и с обычными функциями, и с async, считать процент ошибок по скользящему окну и отдельно реагировать на слишком медленные вызовы.Можно собрать полноценный pipeline отказоустойчивости:
pipeline = (
Pipeline.builder()
.fallback(...)
.retry(attempts=4)
.circuit_breaker(breaker)
.bulkhead(8)
.timeout(2.0)
.build()
)
То есть timeout, retry, ограничение параллелизма, circuit breaker и fallback складываются в одну явную цепочку.
Есть интеграции с
httpx, aiohttp, requests, FastAPI, Redis и OpenTelemetry. Через Redis состояние breaker можно шарить между несколькими процессами или инстансами приложения.Ещё полезная штука -
METRICS_ONLY: сначала можно просто посмотреть реальные проценты ошибок и медленных запросов в проде, ничего не блокируя, а уже потом включить breaker.https://github.com/bagowix/interlock
