มีจุดที่ยังรู้สึกขาดไปอยู่บ้างเมื่อใช้งานไลบรารี 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";)  

ค่าเริ่มต้น: จะทริปเมื่อ 50% ของการเรียก 100 ครั้งล่าสุดล้มเหลว และจะลองกู้คืนหลัง 60 วินาที

รองรับ async

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";)  

ความสามารถหลัก

Sliding Window + ทริปตามอัตราความล้มเหลว

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

→ ทริปเมื่อเกิดความล้มเหลวต่อเนื่อง 5 ครั้ง หรือเมื่อ 50% ของการเรียก 100 ครั้งล่าสุดล้มเหลว

การกู้คืนแบบค่อยเป็นค่อยไป (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
Sliding Window O X X X
ทริปตามอัตราความล้มเหลว O X X X
กฎที่นำมาผสมกันได้ O X X X
การกู้คืนแบบค่อยเป็นค่อยไป O X X X

ลิงก์

ยินดีรับฟีดแบ็กจากทุกคนครับ!

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น