Jaetuissa järjestelmissä kutsut epäonnistuvat. Uudelleenyritykset eksponentiaalisella varoituksella palautuvat väliaikaisista virheistä; piirinkatkaisija estää sinua lyömästä riippuvuutta, joka on todella poissa käytöstä. Ne täydentävät toisiaan: yritä uudelleen hetken kestävä virhe, katkaise katkoksessa.
Uudelleenyritys eksponentiaalisella varoituksella + jitter
Väliaikaisista virheistä (aikakatkaisut, lyhyet verkon katkokset, 503s), yritä uudelleen — mutta varoita eksponentiaalisesti ja lisää jitter niin, että uudelleenyritykset hajoavat sen sijaan, että synkronoituvat pörssipaniikkiin.
attempt 1 → wait ~1s (+ random jitter)
attempt 2 → wait ~2s (+ random jitter)
attempt 3 → wait ~4s (+ random jitter)
→ cap at maxRetries (e.g. 3) and a max delay → don't retry forever
Keskeiset varoitukset:
- Rajoita uudelleenyritykset — rajoittamattomat uudelleenyritykset luovat uudelleenyritysraivoja, jotka ylikuormittavat kuntoutuvaa palvelua.
- Idempotenssi — yritä uudelleen vain operaatioita, jotka on turvallista toistaa (uudelleenyritettävää maksua ei saa veloittaa kahdesti).
- Jitter — ilman sitä kaikki asiakkaat yrittävät uudelleen samalla hetkellä ja uudelleen piikkivät kuormituksen.
Piirinkatkaisija
Piirinkatkaisija seuraa virheitä riippuvuudella ja kynnyksen jälkeen avautuu — epäonnistuu nopeasti (tai palauttaa varasuunnitelman) sen sijaan, että kutsuu kuollutta palvelua. Jäähdytyskauden jälkeen se tulee puoli-auki palautumisen tutkimiseksi.
CLOSED → calls pass through; count failures
too many failures → trip → OPEN
OPEN → fail fast immediately (no call); start cooldown timer
cooldown elapsed → HALF-OPEN
HALF-OPEN → allow a few probe calls
success → CLOSED (recovered) ; failure → back to OPEN
Milloin jokainen koskee
Retry → transient, likely-to-succeed-soon errors (1 slow call)
Circuit breaker → repeated/sustained failures (the dependency is down)
→ use together: breaker prevents retries from piling onto a dead service
Miksi se on tärkeää
Ilman näitä, epäonnistuva riippuvuus vie soittajan mukanaan: pyynnöt kasautuvat aikakatkaisuille, uudelleenyritykset vahvistavat kuormitusta ja virhe leviää palveluissa. Eksponentiaalinen varoitus jitterin kanssa palautuu virheistä ilman uudelleenyritysraivoa; rajoitukset ja idempotenssi pitävät uudelleenyritykset turvallisina; ja piirinkatkaisija lopettaa resurssien tuhlaamisen kuolleelle riippuvuudelle ja antaa sille tilaa palautua. Yhdessä ne muuttavat riippuvuusvirheen sisällytetyksi, itseään parantavaksi tapahtumaksi.
