V distribuovaném systému všechno nakonec selže. Vzory odolnosti zabraňují tomu, aby selhání jedné služby vedlo k úplnému výpadku.
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.
Opakování bez exponenciálního zpoždění zvyšuje zatížení již postižené služby (průliv opakování). Vždy přidejte exponenciální zpoždění, náhodu a limit opakování.
Tyto vzory mění nevyhnutelné selhání jedné služby na zhoršenou funkci namísto úplného výpadku webu.
Pracují společně: časové limity omezují čekání, přerušovače okruhu zastaví hammering mrtvých služeb, přepážky omezují rádiusz výbuchu a opakování se zotavují z výpadků — pokud kterýkoli vynecháte, selhání se stále šíří.