Circuit Breaker

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 #

AspekRetryCircuit Breaker
FokusMencoba ulangMenghentikan kegagalan
RisikoTraffic spikeLebih stabil
CocokError sementaraDependency 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.”

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact