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.