DBRaven
Failure IsolationHigh operational impact

Retry Logic Can Amplify Failure

Retry logic written to improve individual request reliability can: under failure conditions: increase total system load by 2-10x, converting a partial degradation into a complete outage.

When a downstream service begins failing, naive retry logic in all callers causes each failed request to generate multiple retry attempts. If 100 callers each retry 3 times on failure, the downstream receives 400 requests instead of 100 : 4x the load on an already-degraded system. This is a retry storm. It is not a pathological edge case: it is a predictable consequence of retry logic without backoff, jitter, and circuit breaking. Well-intentioned reliability engineering produces the outage it was designed to prevent.

Why It Matters

Retry logic is mandatory for transient failure handling. It is also one of the most common causes of production outages in distributed systems. The combination of retry with exponential backoff without jitter produces thundering-herd recovery events. The combination of retry without circuit breaker produces retry storms on sustained failures. Every retry implementation must be designed with both the happy path (transient failure recovery) and the failure path (sustained failure amplification) in mind simultaneously.

Failure Modes

  • ·Retry storm: all callers retry simultaneously, multiplying load on degraded downstream
  • ·Thundering herd on recovery: all circuit breakers open simultaneously when service recovers
  • ·Retry amplification cascade: retried requests hit already-slow service, creating more failures, more retries
  • ·Connection pool exhaustion from retry: retrying requests hold connections longer, exhausting pools
  • ·Idempotency violation: non-idempotent operations retried on partial success, causing duplicate side effects

Amplification Risks

  • Retry storm: 3-attempt retry with 5 callers = 15x amplification factor on degraded downstream
  • Backoff-without-jitter thundering herd: all callers back off for the same duration, then retry simultaneously
  • Connection amplification: each retry attempt allocates a new connection before the failed connection is returned

Temporal Behavior

  • Retry storm duration scales with backoff policy: poor backoff extends storm duration indefinitely
  • Circuit breaker half-open probe intervals create a temporal pattern for recovery validation
  • Jitter spreads retry attempts over time: this is the only mechanism preventing synchronized thundering herd

Boundary Implications

  • Circuit breakers are the retry boundary: they prevent retry storms from crossing into sustained amplification
  • Bulkheads prevent retry-induced connection pool exhaustion from crossing service boundaries
  • Retry policies must respect the downstream service's capacity boundary: not just the individual request SLA

Topology

  • ·All synchronous call paths with retry logic are potential retry storm sources
  • ·Shared downstream services with multiple independent callers multiply the retry amplification factor
  • ·Circuit breakers at topology edges are structural prerequisites for safe retry logic

Scaling

  • ·Retry amplification factor scales with the number of independent callers sharing a downstream
  • ·At high scale, even short-duration failures trigger disproportionate retry storms
  • ·Retry amplification increases connection pool exhaustion risk under sustained partial failures

Resilience

  • ·Retry with circuit breaker is more resilient than retry alone: the breaker prevents amplification
  • ·Retry without jitter reduces resilience during recovery: all callers hit the recovering service simultaneously
  • ·Idempotency must be built into retry targets: not assumed from them

Governance Implications

  • ·All retry implementations require explicit circuit breaker coverage at the call site
  • ·Retry configuration (attempts, backoff, jitter) must be reviewed as part of service design
  • ·Non-idempotent operations must be explicitly excluded from retry: not left to developer judgment

Evolution Implications

  • ·Adding retry logic to existing services requires auditing all downstream dependencies for idempotency
  • ·Moving from no retry to retry requires simultaneous circuit breaker introduction
  • ·Retry policies must be updated when downstream service SLAs change

Mitigation Patterns

  • Always pair retry logic with circuit breaker at the same call site
  • Use exponential backoff with random jitter: never fixed-interval backoff
  • Set retry attempt limits that account for the total amplification factor across all callers
  • Ensure all retry targets are idempotent: or explicitly exclude non-idempotent operations from retry
  • Test retry behavior under sustained failure: not just transient failure

Cross-References

synchronous coupling amplifies fragilityboundaries define failuredistributed systems fail graduallyretry storm amplificationconnection pool exhaustion cascadecircuit breaker patternsretry and backoff