Fluxgate - Circuit Breaker Python yang Mendukung Aturan yang Dapat Dikombinasikan dengan Sliding Window
(byexist.github.io)Saat menggunakan library Circuit Breaker Python yang sudah ada (circuitbreaker, pybreaker, dan lainnya), ada beberapa hal yang terasa kurang memuaskan.
- Hanya menggunakan penghitung kegagalan beruntun: sekali berhasil, penghitung di-reset sehingga sulit mendeteksi layanan yang tidak stabil
- Saat pemulihan hanya mengizinkan satu panggilan uji: kurang memadai untuk hal seperti cache warming
Terinspirasi dari dukungan operator Django Permission dan pengelolaan window di resilience4j.
Instalasi
pip install fluxgate
Penggunaan dasar
from fluxgate import CircuitBreaker
cb = CircuitBreaker(name="external_api")
@cb
def call_api():
return requests.get("https://api.example.com/data")
Nilai default: trip jika 50% dari 100 panggilan terakhir gagal, lalu mencoba pulih kembali setelah 60 detik
Dukungan asinkron
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")
Fitur utama
Sliding window + trip berbasis tingkat kegagalan
from fluxgate import CircuitBreaker
from fluxgate.trippers import MinRequests, FailureRate, FailureStreak
cb = CircuitBreaker(
name="api",
tripper=FailureStreak(5) | (MinRequests(100) & FailureRate(0.5))
)
→ Trip saat gagal 5 kali berturut-turut, atau saat 50% dari 100 panggilan terakhir gagal
Pemulihan bertahap (RampUp)
from fluxgate.permits import RampUp
cb = CircuitBreaker(
name="api",
permit=RampUp(initial=0.1, final=1.0, duration=60.0)
)
→ Saat pemulihan, traffic dimulai dari 10% lalu meningkat bertahap hingga 100% selama 60 detik
Perbandingan fitur dengan library yang sudah ada
| Fitur | fluxgate | circuitbreaker | pybreaker | aiobreaker |
|---|---|---|---|---|
| Sliding window | O | X | X | X |
| Trip berbasis tingkat kegagalan | O | X | X | X |
| Aturan yang dapat dikombinasikan | O | X | X | X |
| Pemulihan bertahap | O | X | X | X |
Tautan
- GitHub: https://github.com/byExist/fluxgate
- Dokumentasi: https://byExist.github.io/fluxgate/
Mohon banyak masukan dan feedback!
Belum ada komentar.