Circuit Breaker #
Dalam sistem terdistribusi dan microservices, kegagalan bukanlah sebuah anomali, melainkan kepastian. Network timeout, service downstream lambat, dependency down, atau lonjakan traffic bisa menyebabkan failure cascade yang berujung pada sistem lumpuh total.
Di sinilah Circuit Breaker Pattern berperan penting: ia bertindak seperti MCB listrik pada software — memutus aliran request ketika kondisi sudah tidak sehat, lalu mencoba menyambung kembali secara terkontrol.
Apa Itu Circuit Breaker? #
Circuit Breaker adalah pola desain yang digunakan untuk:
- Mencegah request terus-menerus ke dependency yang sedang gagal
- Mengurangi latency dan resource waste
- Menghindari cascading failure
- Memberi waktu dependency untuk recovery
Alih-alih setiap request mencoba dan gagal, circuit breaker mendeteksi pola kegagalan dan mengambil keputusan secara otomatis.
Masalah yang Diselesaikan Circuit Breaker #
Tanpa circuit breaker:
- Request menumpuk → thread habis
- Timeout berantai
- CPU & memory spike
- Satu service mati → service lain ikut mati
Circuit breaker memutus rantai ini lebih awal.
State pada Circuit Breaker #
Circuit breaker bekerja berdasarkan state machine.
1. Closed #
- Semua request diteruskan ke downstream
- Error dan latency dipantau
2. Open #
- Request langsung ditolak (fail fast)
- Tidak ada request ke downstream
3. Half-Open #
- Request terbatas diizinkan
- Digunakan untuk health check
- Jika sukses → kembali ke Closed
- Jika gagal → kembali ke Open
Diagram Besar (Big Picture) #
[ Client ]
|
v
[ Circuit Breaker ]
|
|--( CLOSED )--> [ Downstream Service ] --> Response OK
|
|--( OPEN )----> Fail Fast / Fallback
|
|--( HALF-OPEN )-> Limited Probe Request
Alur Keputusan Circuit Breaker #
Request Masuk
|
v
Apakah Circuit OPEN?
|-- Ya --> Fail Fast / Fallback
|
|-- Tidak
|
v
Forward ke Downstream
|
v
Apakah Error/Timeout?
|-- Tidak --> Reset counter
|
|-- Ya
|
v
Error threshold tercapai?
|-- Ya --> Circuit OPEN
|-- Tidak --> Tetap CLOSED
Parameter Penting dalam Circuit Breaker #
1. Failure Threshold #
- Jumlah error atau persentase kegagalan
- Contoh: 50% error dalam 20 request
2. Timeout #
- Batas waktu request ke downstream
- Terlalu besar → resource terblokir
- Terlalu kecil → false positive
3. Open Duration (Sleep Window) #
- Lama circuit berada di state OPEN
- Setelah ini → masuk HALF-OPEN
4. Half-Open Trial Request #
- Jumlah request uji coba
- Biasanya kecil (1–5 request)
Circuit Breaker vs Retry #
| Aspek | Retry | Circuit Breaker |
|---|---|---|
| Fokus | Mencoba ulang | Menghentikan kegagalan |
| Risiko | Traffic spike | Lebih stabil |
| Cocok | Error sementara | Dependency tidak sehat |
Best practice: gunakan Retry + Circuit Breaker, bukan salah satu saja.
Best Practices Circuit Breaker #
1. Selalu Gunakan Timeout #
Circuit breaker tidak berguna tanpa timeout.
❌ Request tanpa timeout
✅ Timeout + Circuit Breaker
2. Gunakan Fallback yang Masuk Akal #
Contoh fallback:
- Cached data
- Default response
- Graceful error message
User > Error cepat > UX tetap terjaga
3. Jangan Terlalu Agresif #
Threshold terlalu kecil menyebabkan:
- Circuit sering OPEN
- Sistem tidak stabil
Mulai dari:
- 20–50 request window
- 30–50% failure rate
4. Bedakan Circuit per Dependency #
❌ Satu circuit untuk semua API ✅ Satu circuit per service / endpoint
5. Monitoring & Observability #
Pantau:
- Open / Half-Open frequency
- Failure rate
- Latency
Expose metric:
- Prometheus
- OpenTelemetry
6. Jangan Lupa Logging & Alert #
Circuit OPEN adalah sinyal masalah, bukan solusi akhir.
Contoh Use Case Nyata #
Payment Gateway #
- Circuit OPEN → jangan retry pembayaran
- Fallback → tampilkan metode pembayaran lain
Recommendation Service #
- Circuit OPEN → tampilkan rekomendasi default
Notification Service #
- Circuit OPEN → simpan ke queue
Tools & Library Populer #
- Java: Resilience4j, Hystrix (deprecated)
- Go: sony/gobreaker
- Node.js: opossum
- Service Mesh: Istio, Linkerd
Kesimpulan #
Circuit breaker bukan hanya tentang memutus request, tapi tentang:
- Melindungi sistem
- Menjaga pengalaman pengguna
- Memberi waktu sistem untuk pulih
Dalam arsitektur modern, circuit breaker adalah komponen wajib, bukan opsional.
“Fail fast, recover faster.”