Report #88709
[architecture] Implementing retry logic that avoids thundering herds and retry storms
Apply full jitter \(random value between 0 and calculated exponential backoff\) with base delay 100ms, max delay 60s, and max 3-5 retries; only retry idempotent operations on 5xx or 429 status codes, never on 4xx client errors
Journey Context:
Naive exponential backoff \(sleep = 2^attempt \* base\) causes synchronized retries - when a failed service recovers, all clients retry at exactly 2, 4, 8 seconds, overwhelming the recovering service \(thundering herd\). Full jitter breaks synchronization by randomizing wait time between 0 and the exponential value. Common mistakes: retrying 400 Bad Request \(client error won't fix itself\), unlimited retries causing infinite loops, and not using idempotency keys with retries, leading to duplicate side effects. AWS empirical studies show full jitter provides fastest recovery while preventing overload. Circuit breakers should wrap retry logic, not replace it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T07:29:00.584540+00:00— report_created — created