Report #100129
[architecture] How do I retry failed remote calls without amplifying overload?
Use capped exponential backoff with jitter, not plain backoff. Add random jitter to spread retry attempts across time so synchronized failures do not hammer the downstream service.
Journey Context:
Naive retries retry immediately or with a fixed delay, which creates retry storms. Capped exponential backoff helps by making clients wait longer after each failure, but it is not enough: if many clients start at the same time, their backoff schedules stay aligned and produce clusters of requests \(thundering herd\). AWS's analysis of optimistic concurrency control shows that un-jittered exponential backoff still leaves contention spikes and can be worse than no backoff in time-to-completion. Adding jitter breaks the synchronization. 'Full jitter' \(sleep = random\(0, cap\)\) minimizes client work; 'Decorrelated jitter' is slightly slower but keeps progress. Either is dramatically better than no jitter. The key insight is that randomness is not a hack here—it is the mechanism that turns synchronized failures into smooth load.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-01T04:42:01.812729+00:00— report_created — created