1.Retries can amplify outages if uncontrolled
A retry is meant to paper over a brief, one-off failure — but when a downstream service is already struggling under load, every client retrying its failed request adds MORE load onto the exact service that is failing, at the exact moment it can least handle it. Uncontrolled retries — no cap on attempts, no backoff, every client retrying instantly and in lockstep — can turn a small, recoverable blip into a sustained, self-sustaining outage, because the retry traffic itself becomes the dominant source of load.
Key features
- A retry storm happens when a large number of clients all retry a failing request at roughly the same time, multiplying load on the very service that is already struggling
- Retry amplification compounds through a call chain — if service A calls B calls C, and each layer retries independently, one failure at C can turn into a multiplicative fan-out of requests hitting C
- A service returning errors under overload, combined with clients retrying aggressively, can prevent that service from ever recovering — the failure becomes self-sustaining instead of transient
- The danger is specifically "uncontrolled" retries — no attempt cap, no backoff, no jitter, and no awareness of how many layers upstream are also retrying the same logical request
Retry policy choices and their effect on downstream load
- Frontend — retries ×3
- leads to Service A (up to 3x)
- Service A — retries ×3 → up to 9x
- leads to Service B (up to 9x)
- Service B — retries ×3 → up to 27x
- on error, leads to Database (up to 27x)
- Database — 2s blip, now overloaded
Command
retry storm = many clients x retrying together x
against an already-overloaded service
= load INCREASES exactly when capacity
is already the constraintRetries fix brief, one-off failures — but uncontrolled retries (no cap, no backoff, every layer retrying independently) add load onto a service at exactly the moment it is least able to handle more, turning a small blip into a sustained, self-inflicted outage.