Skip to content

Retry exponential backoff

Retry & Exponential Backoff Deep Dive

Overview

Retry logic + exponential backoff handle transient failures without overwhelming servers.

Core Concepts

  • Idempotent operations (GET, PUT, DELETE) can retry
  • Non-idempotent (POST create) need caution
  • Exponential backoff: 2^attempt * base + jitter

Code Examples

// OkHttp retry interceptor
class RetryInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        repeat(3) { attempt ->
            try {
                return chain.proceed(chain.request())
            } catch (e: IOException) {
                if (attempt == 2) throw
                Thread.sleep(100 * (2.0.pow(attempt.toDouble())).toLong())
            }
        }
    }
}

Senior-Level Insights

  • Jitter prevents thundering herd
  • Set max total time, not just attempts
  • Backoff: connect > read > write timeouts