Retries are one of the most common ways to make distributed systems more resilient.
A request fails because of a temporary network issue. The client waits briefly and tries again. The second attempt succeeds, and the failure never reaches the user.
That sounds reasonable.
But what happens when the dependency is already overloaded?
Requests start failing. Every caller retries. Those retries create additional traffic, which causes more failures, which trigger even more retries.
A temporary slowdown can turn into a retry storm.
Retries are not free. Every attempt consumes resources, occupies connections, increases queue pressure, and adds work to an already struggling dependency.
This is where retry budgets become useful.
A retry budget places a limit on how much additional traffic a service can generate through retries.…