ਇੱਕ ਵਿਤਰਿਤ ਸਿਸਟਮ ਵਿੱਚ, ਸਭ ਕੁਝ ਅੰਤ ਵਿੱਚ ਅਸਫਲ ਹੁੰਦਾ ਹੈ। Resilience patterns ਇੱਕ ਸਿੰਗਲ ਅਸਫਲਤਾ ਨੂੰ ਪੂਰੀ ਖਰਾਬੀ ਵਿੱਚ ਫੈਲਣ ਤੋਂ ਰੋਕਦੇ ਹਨ।
ਇੱਕ ਵਿਤਰਿਤ ਸਿਸਟਮ ਵਿੱਚ, ਸਭ ਕੁਝ ਅੰਤ ਵਿੱਚ ਅਸਫਲ ਹੁੰਦਾ ਹੈ। Resilience patterns ਇੱਕ ਸਿੰਗਲ ਅਸਫਲਤਾ ਨੂੰ ਪੂਰੀ ਖਰਾਬੀ ਵਿੱਚ ਫੈਲਣ ਤੋਂ ਰੋਕਦੇ ਹਨ।
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 ਬਿਨਾਂ Retries ਪਹਿਲਾਂ ਹੀ ਸੰਘਰਸ਼ ਕਰ ਰਹੀ ਸੇਵਾ 'ਤੇ ਭਾਰ ਵਧਾਉਂਦੇ ਹਨ (ਇੱਕ retry storm)। ਹਮੇਸ਼ਾ backoff, jitter ਅਤੇ ਇੱਕ retry ਕੈਪ ਜੋੜੋ।
ਇਹ patterns ਹਨ ਜੋ ਇੱਕ ਅਨਿਵਾਰ ਸਿੰਗਲ-ਸੇਵਾ ਅਸਫਲਤਾ ਨੂੰ ਪੂਰੀ ਸਾਈਟ-ਵਿਆਪਕ ਖਰਾਬੀ ਦੀ ਬਜਾਏ ਇੱਕ ਖਰਾਬ ਫੀਚਰ ਵਿੱਚ ਬਦਲ ਦਿੰਦੇ ਹਨ।
ਉਹ ਇਕੱਠੇ ਕਾਮ ਕਰਦੇ ਹਨ: timeouts ਉਡੀਕ ਨੂੰ ਬਾਂਧਦੇ ਹਨ, circuit breakers ਮਰੀ ਹੋਈ ਸੇਵਾਵਾਂ ਨੂੰ ਹਮਲਾ ਕਰਨ ਤੋਂ ਰੋਕਦੇ ਹਨ, bulkheads ਬਲਾਸਟ ਰੇਡੀਅਸ ਨੂੰ ਸੀਮਤ ਕਰਦੇ ਹਨ, ਅਤੇ retries blips ਤੋਂ ਠੀਕ ਹੋ ਜਾਂਦੇ ਹਨ — ਕੋਈ ਵੀ ਇੱਕ ਛੱਡੋ ਅਤੇ ਅਸਫਲਤਾਵਾਂ ਅਜੇ ਵੀ ਫੈਲਦੀਆਂ ਹਨ।