Într-un sistem distribuit, totul se defectează în cele din urmă. Modelele de reziliență împiedică o singură defecțiune să se extindă în cascadă într-o pană completă.
Într-un sistem distribuit, totul se defectează în cele din urmă. Modelele de reziliență împiedică o singură defecțiune să se extindă în cascadă într-o pană completă.
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.
Încercările din nou fără backoff amplifică sarcina pe un serviciu care se confruntă deja (o furtună de reîncercări). Adaugă întotdeauna backoff, jitter și o limită de reîncercări.
Aceste modele sunt ceea ce transformă o defecțiune inevitabilă a unui singur serviciu într-o funcție degradată în loc de o pană pe întreg site-ul.
Funționează împreună: timeout-urile limitează așteptarea, circuit breaker-ele opresc atacarea serviciilor moarte, bulkhead-urile limitează raza deflagrației, iar reîncercările se recuperează din erori minore — omite pe oricare și defecțiunile se propagă în continuare în cascadă.