U distribuiranom sustavu, sve naposljetku neće raditi. Obrasci otpornosti sprječavaju da se jedan neuspjeh ne proširi u potpunu neispravnost.
U distribuiranom sustavu, sve naposljetku neće raditi. Obrasci otpornosti sprječavaju da se jedan neuspjeh ne proširi u potpunu neispravnost.
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.
Pokušaji bez backoff pojačavaju opterećenje već osiromašene usluge (oluja pokušaja). Uvijek dodajte backoff, jitter i ograničenje pokušaja.
Ovi obrasci su ono što neizbježan neuspjeh jedne usluge pretvaraju u degradirano značajke umjesto prekida na cijeloj web-stranici.
Rade zajedno: timeout-i ograničavaju čekanje, circuit breakeri zaustavaljaju ozbiljnu grešku mrtvih usluga, bulkhead-ovi sadržavaju radijus eksplozije, a retry-ji se oporavljaju od greške — ako izostavite bilo koji i greške i dalje se šire.