Paskirstytoje sistemoje viskas galiausiai nepavyksta. Atsparumo šablonai nustabdo vieno gedimo kaskadinį žlugimą į visą gedimą.
Paskirstytoje sistemoje viskas galiausiai nepavyksta. Atsparumo šablonai nustabdo vieno gedimo kaskadinį žlugimą į visą gedimą.
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.
Bandymai iš naujo be backoff padidina apkrovą jau kovojančiai tarnybai (bandymų audra). Visada pridėkite backoff, jitter ir bandymų viršutinę ribą.
Šie šablonai yra tai, kas vieną neišvengiamą vienos tarnybos gedimą paverčia sumažinta funkcija, o ne visos svetainės gedimą.
Jie veikia kartu: timeout riboja laukimą, circuit breaker sustabdo mirguliavimą negyviomis tarnybomis, bulkhead riboja sprogimo spindulį, o bandymai iš naujo atsigauna iš plaušelių — jei praleisti bet kurį iš jų, gedimai vis tiek kaskaduoja.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti