Dalam sistem terdistribusi, semuanya pada akhirnya gagal. Pola resiliensi menghentikan satu kegagalan dari menyebar menjadi kehancuran total.
Dalam sistem terdistribusi, semuanya pada akhirnya gagal. Pola resiliensi menghentikan satu kegagalan dari menyebar menjadi kehancuran total.
const breaker = new CircuitBreaker(callPaymentService, {
timeout: 3000, // fail the call after 3s
errorThresholdPercentage: 50, // open if >50% of calls fail
resetTimeout: 10000 // after 10s, try one request (half-open)
});
breaker.fallback(() => ({ status: 'queued' })); // graceful degradation
CLOSED ──(failures exceed threshold)──▶ OPEN
▲ │ (after resetTimeout)
│ (trial succeeds) ▼
└────────────── HALF-OPEN ◀──────────────┘
(one trial request)
[ pool A: 10 threads ] → payment calls
[ pool B: 10 threads ] → search calls
If search hangs, it drains pool B only — payments keep working.
Retry tanpa backoff memperkuat beban pada layanan yang sudah kesulitan (badai retry). Selalu tambahkan backoff, jitter, dan batas retry.
Pola-pola ini adalah apa yang mengubah satu kegagalan layanan yang tak terhindarkan menjadi fitur yang berkurang daripada kehancuran di seluruh situs.
Mereka bekerja bersama: timeout membatasi menunggu, circuit breaker menghentikan pemukulan layanan mati, bulkhead membatasi jari-jari ledakan, dan retry pulih dari gangguan kecil — abaikan satu pun dan kegagalan masih akan menyebar.