I et distribueret system fejler alt til sidst. Resiliensmønstre forhindrer, at en enkelt fejl får hele systemet til at bryde sammen.
I et distribueret system fejler alt til sidst. Resiliensmønstre forhindrer, at en enkelt fejl får hele systemet til at bryde sammen.
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.
Retry uden backoff forøger belastningen på en allerede kæmpende tjeneste (en retry-storm). Tilføj altid backoff, jitter og et retry-loft.
Disse mønstre er det, der forvandler en uundgåelig enkeltservice-fejl til en nedværdiget funktion i stedet for et nedbrud på hele webstedet.
De fungerer sammen: timeouts begrænser ventetid, circuit breakers stopper konstant opkald til døde tjenester, bulkheads inddammer eksplosionsradius, og retries genoprettet fra blip — hvis du udelader nogen af dem, spredes fejlene stadig.