Dalam sistem yang diedarkan, semuanya akhirnya gagal. Corak ketahanan menghentikan satu kegagalan daripada mengalir ke putus daya penuh.
Dalam sistem yang diedarkan, semuanya akhirnya gagal. Corak ketahanan menghentikan satu kegagalan daripada mengalir ke putus daya penuh.
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.
Percubaan semula tanpa backoff meningkatkan beban pada perkhidmatan yang sudah kesusahan (ribut percubaan semula). Selalu tambahkan backoff, jitter, dan had percubaan semula.
Corak ini adalah yang mengubah satu kegagalan perkhidmatan yang tidak dapat dielakkan menjadi ciri yang merosot daripada pemadaman seluruh laman.
Mereka bekerja bersama: timeout terikat menunggu, circuit breaker berhenti memukul perkhidmatan mati, bulkhead mengandung jejari ledakan, dan percubaan semula pulih daripada blip — hilangkan salah satu dan kegagalan masih melata.