Fluxgate - Python Circuit Breaker ที่รองรับ Sliding Window และกฎที่นำมาผสมกันได้
(byexist.github.io)มีจุดที่ยังรู้สึกขาดไปอยู่บ้างเมื่อใช้งานไลบรารี 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 |
ลิงก์
ยินดีรับฟีดแบ็กจากทุกคนครับ!
ยังไม่มีความคิดเห็น