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