V distribuiranem sistemu se vse na koncu pokvari. Vzorci odpornosti preprečijo, da bi ena napaka povzročila kaskadno razširjanje v popolno zaustavitev sistema.
V distribuiranem sistemu se vse na koncu pokvari. Vzorci odpornosti preprečijo, da bi ena napaka povzročila kaskadno razširjanje v popolno zaustavitev sistema.
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.
Ponovljeni poskusi brez backoff povečajo obremenitev že potrudene storitve (vihar ponovnih poskusov). Vedno dodaj backoff, jitter in omejitev ponovnih poskusov.
Ti vzorci so tisto, kar spremeni neizbežno napako ene storitve v degradirano funkcionalnost namesto popolne zaustavitve spletnega mesta.
Delujejo skupaj: timeout-i omejijo čakanje, circuit breaker-ji nehajo napadati mrtve storitve, bulkhead-i omejijo obseg škode, ponovni poskusi pa se okopljejo pred hitrimi izpadi — izpusti kateregakoli in napake se še vedno kaskadno razširijo.
Knjižnica IT vprašanj za razgovore s podrobnimi odgovori — od začetnika do izkušenega.
Doniraj