W systemie rozproszonym wszystko ostatecznie się nie powiedzie. Wzorce odporności uniemożliwiają jednemu błędowi kaskadowo rozprzestrzeniać się na całą awarię.
W systemie rozproszonym wszystko ostatecznie się nie powiedzie. Wzorce odporności uniemożliwiają jednemu błędowi kaskadowo rozprzestrzeniać się na całą awarię.
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.
Ponowne próby bez backoff wzmacniają obciążenie już borykającej się usługi (burza ponownych prób). Zawsze dodawaj backoff, jitter i limit ponownych prób.
Te wzorce to to, co zamienia nieuniknioną awarię pojedynczej usługi w zdegradowaną funkcję zamiast awarii na całej stronie.
Pracują razem: timeout ogranicza oczekiwanie, circuit breaker uniemożliwia udar upadłych usług, bulkhead zawiera promień wybuchu, a retry odzyskuje się z drobnych błędów — pomiń dowolny i błędy nadal się rozprzestrzeniają.
Biblioteka pytań rekrutacyjnych IT ze szczegółowymi odpowiedziami — od Juniora do Seniora.
Wesprzyj