Dağıtılmış bir sistemde her şey sonunda başarısız olur. Dayanıklılık desenleri, tek bir hatanın tamamen bir kesintiye dönüşmesini engeller.
Dağıtılmış bir sistemde her şey sonunda başarısız olur. Dayanıklılık desenleri, tek bir hatanın tamamen bir kesintiye dönüşmesini engeller.
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.
Backoff olmadan yeniden denemeler, zaten mücadele eden bir hizmete yükü artırır (yeniden deneme fırtınası). Her zaman backoff, jitter ve yeniden deneme sınırı ekleyin.
Bu desenler, kaçınılmaz bir tek hizmet hatasını site genelindeki kesintinin aksine bozulmuş bir özelliğe dönüştüren şeydir.
Birlikte çalışırlar: zaman aşımları beklemeyi sınırlar, devre kesicileri ölü hizmetlere vurmayı durdurur, bulkheadler patlama yarıçapını içerir ve yeniden denemeler hata atlatmalarından kurtarır — herhangi birini atlayın ve hatalar yine de yayılır.