Comece agoraComece grátis

Implementando exponential backoff com jitter

Você está integrando com uma API de pagamentos de terceiros instável, que às vezes retorna erros transitórios. Para evitar sobrecarregar o serviço quando ele já está com dificuldades, você vai implementar uma estratégia de novas tentativas que usa exponential backoff com full jitter, aumentando o tempo de espera entre as tentativas e adicionando aleatoriedade para que uma "manada" de clientes não tente novamente exatamente no mesmo instante.

Uma função flaky_call(payload) está disponível: ela falha com TransientError nas 3 primeiras invocações e tem sucesso na 4ª. time, random e TransientError já estão carregados.

Este exercicio faz parte do curso

Desenvolvendo Aplicações na AWS

Ver curso

Instruções do exercicio

  • Dentro do bloco try, chame flaky_call com payload e retorne o resultado.
  • Calcule o limite exponencial para esta tentativa usando base e a contagem atual de attempt.
  • Aplique full jitter escolhendo uma espera aleatória entre 0 e cap usando random.uniform().

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

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 e Executar Código