The problem solved by retry and circuit breaker stems from cascade failures caused by a service or a function inside a chain of calling becoming unavailable. In the following figure, we assume that five different functions or services have 99% availability, so they will fail once every 100 calls. The client observing this service's chain will experience the availability of A at only 95.09%:
What does this imply? It means that when this chain becomes eight functions long, the availability will become 92.27%, and if it's 20 functions long, this figure will decrease to 81.79%. To reduce the failure rate, we should retry calling to another instance of function or service when an error, such as HTTP 500, occurs.
But a simple or constant-rate retry is not enough. If we use a simple strategy, our retry calls would increase unnecessary loads to the already broken service. This would cause more problems than it would solve.