기존 Python Circuit Breaker 라이브러리들(circuitbreaker, pybreaker 등)을 쓰다 보니 아쉬운 점이 있었습니다.

  • 연속 실패 카운터만 사용: 한 번 성공하면 리셋되어 불안정한 서비스 감지 어려움
  • 복구 시 단일 테스트 호출만 허용: 캐시 워밍업 등에 부족

Django Permission 연산자 지원, resilience4j의 윈도우 관리에서 영감을 받았습니다.

설치

pip install fluxgate  

기본 사용법

from fluxgate import CircuitBreaker  
  
cb = CircuitBreaker(name="external_api")  
  
@cb  
def call_api():  
    return requests.get("https://api.example.com/data";)  

기본값: 최근 100회 호출 중 50% 실패 시 트립, 60초 후 복구 시도

비동기 지원

from fluxgate import AsyncCircuitBreaker  
  
cb = AsyncCircuitBreaker(name="external_api")  
  
@cb  
async def call_api():  
    async with httpx.AsyncClient() as client:  
        return await client.get("https://api.example.com/data";)  

핵심 기능

슬라이딩 윈도우 + 실패율 기반 트립

from fluxgate import CircuitBreaker  
from fluxgate.trippers import MinRequests, FailureRate, FailureStreak  
  
cb = CircuitBreaker(  
    name="api",  
    tripper=FailureStreak(5) | (MinRequests(100) & FailureRate(0.5))  
)  

→ 5회 연속 실패 또는 최근 100개 호출 중 50% 실패 시 트립

점진적 복구 (RampUp)

from fluxgate.permits import RampUp  
  
cb = CircuitBreaker(  
    name="api",  
    permit=RampUp(initial=0.1, final=1.0, duration=60.0)  
)  

→ 복구 시 10%에서 시작해 100%까지 60초 동안 점진적으로 트래픽 증가

기존 라이브러리와의 기능 비교

기능 fluxgate circuitbreaker pybreaker aiobreaker
슬라이딩 윈도우 O X X X
실패율 기반 트립 O X X X
조합 가능한 규칙 O X X X
점진적 복구 O X X X

링크

많은 피드백 부탁드립니다!