EmpezarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Dentro del bloque try, llama a flaky_call con payload y devuelve su resultado.
  • Calcula el límite exponencial para este intento usando base y el contador de attempt actual.
  • Aplica full jitter eligiendo una espera aleatoria entre 0 y cap usando random.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)
Editar y ejecutar código