Python-сервис не должен падать вслед за чужим API
Interlock - современная реализация circuit breaker для Python. Она временно блокирует обращения к нестабильному сервису, а затем аккуратно проверяет, восстановился ли он. Синхронный и асинхронный код поддерживаются одним классом.
Вместо примитивного подсчёта ошибок подряд библиотека умеет оценивать долю сбоев в скользящем окне - по числу запросов или времени. Медленные вызовы тоже можно считать ошибочными.
Для сложных сценариев есть resilience
pipeline = (
Pipeline.builder()
.fallback(lambda exc: [])
.retry(attempts=4)
.circuit_breaker(breaker)
.bulkhead(8)
.timeout(2.0)
.build()
)
Порядок стратегий задаётся явно: timeout, bulkhead, circuit breaker, повторные попытки и запасной ответ.
Также доступны интеграции с FastAPI, Litestar, HTTPX, aiohttp, Requests, Redis и OpenTelemetry. Состояние breaker можно синхронизировать между несколькими процессами, а при недоступности Redis библиотека временно возвращается к локальному состоянию.
Ядро не требует внешних зависимостей, декораторы сохраняют типы и сигнатуры функций, лицензия — MIT.
Проект молодой, поэтому проверенные годами pybreaker и circuitbreaker по-прежнему могут быть безопаснее для консервативного продакшена. Но для rate-based окон, контроля медленных запросов и составных политик отказоустойчивости Interlock выглядит интересно.
https://github.com/bagowix/interlock
Interlock - современная реализация circuit breaker для Python. Она временно блокирует обращения к нестабильному сервису, а затем аккуратно проверяет, восстановился ли он. Синхронный и асинхронный код поддерживаются одним классом.
Вместо примитивного подсчёта ошибок подряд библиотека умеет оценивать долю сбоев в скользящем окне - по числу запросов или времени. Медленные вызовы тоже можно считать ошибочными.
Для сложных сценариев есть resilience
pipeline = (
Pipeline.builder()
.fallback(lambda exc: [])
.retry(attempts=4)
.circuit_breaker(breaker)
.bulkhead(8)
.timeout(2.0)
.build()
)
Порядок стратегий задаётся явно: timeout, bulkhead, circuit breaker, повторные попытки и запасной ответ.
Также доступны интеграции с FastAPI, Litestar, HTTPX, aiohttp, Requests, Redis и OpenTelemetry. Состояние breaker можно синхронизировать между несколькими процессами, а при недоступности Redis библиотека временно возвращается к локальному состоянию.
Ядро не требует внешних зависимостей, декораторы сохраняют типы и сигнатуры функций, лицензия — MIT.
Проект молодой, поэтому проверенные годами pybreaker и circuitbreaker по-прежнему могут быть безопаснее для консервативного продакшена. Но для rate-based окон, контроля медленных запросов и составных политик отказоустойчивости Interlock выглядит интересно.
https://github.com/bagowix/interlock