Implementar backoff exponencial con jitter
Te estás integrando con una API de pagos de terceros inestable que a veces devuelve errores transitorios. Para no saturar el servicio cuando ya va justo, vas a implementar una estrategia de reintentos que use backoff exponencial con full jitter, aumentando la espera entre intentos y añadiendo aleatoriedad para evitar que un aluvión de clientes reintente exactamente a la vez.
Tienes disponible una función flaky_call(payload): falla con TransientError en las primeras 3 invocaciones y luego tiene éxito en la 4. time, random y TransientError ya están cargados.
Este ejercicio forma parte del curso
Desarrollo de aplicaciones en AWS
Instrucciones del ejercicio
- Dentro del bloque
try, llama aflaky_callconpayloady devuelve su resultado. - Calcula el límite exponencial para este intento usando
basey el contador deattemptactual. - Aplica full jitter eligiendo una espera aleatoria entre
0ycapusandorandom.uniform().
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
def retry_with_backoff(payload, max_attempts=5, base=0.2):
last_error = None
for attempt in range(max_attempts):
try:
# Try the call
return ____(payload)
except TransientError as err:
last_error = err
# Cap grows exponentially with each attempt
cap = ____ * (2 ** attempt)
# Pick a random wait between 0 and cap (full jitter)
wait = random.____(0, cap)
time.sleep(wait)
# All attempts failed; surface the last error
raise last_error
result = retry_with_backoff({"order_id": 42})
print(result)