Në një sistem të shpërndarë, gjithçka dështon përfundimisht. Modelet e reziliencës ndalojnë që një dështim i vetëm të mos bëhet një ndërprerje e plotë.
Në një sistem të shpërndarë, gjithçka dështon përfundimisht. Modelet e reziliencës ndalojnë që një dështim i vetëm të mos bëhet një ndërprerje e plotë.
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.
Pritjet përsëri pa backoff zmadhojnë ngarkesën në një shërbim që po lufton tashmë (një stuhi ribpraktesh). Gjithmonë shto backoff, jitter dhe një kapak ribpraktesh.
Këto modele janë ajo që e shndërron një dështim të pashmangshëm të një shërbimi në një veçori të degraduar në vend të një ndërprerje në të gjithë sajtit.
Eto punojnë së bashku: timeout-et kufizojnë pritjet, circuit breaker-et ndalojnë sulmimin e shërbimeve të vdekur, bulkhead-et përmbajnë rrezen e shpërthimit, dhe ribprakteshat rimerren nga shqetësimet e shkurta — hiq ndonjërin dhe dështimet ende kaskadohen.