Configurar novas tentativas no AWS SDK para Rust - AWS SDK para Rust

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar novas tentativas no AWS SDK para Rust

O AWS SDK para Rust fornece um comportamento de novas tentativas padrão para solicitações de serviço e opções de configuração personalizáveis. Chamadas para Serviços da AWS ocasionalmente retornam exceções inesperadas. Determinados tipos de erros, como erros transitórios ou de controle de utilização, podem ser bem-sucedidos se a chamada for repetida.

O comportamento de novas tentativas pode ser configurado globalmente usando variáveis de ambiente ou configurações no arquivo compartilhado config da AWS. Para obter mais informações sobre esta abordagem, consulte Comportamento de novas tentativas no Guia de referência de ferramentas e SDKs da AWS. Ele também inclui informações detalhadas sobre implementações de estratégias de novas tentativas e como escolher uma em vez da outra.

Como alternativa, essas opções também podem ser configuradas no código, conforme mostrado nas seções a seguir.

Configuração padrão de novas tentativas

Cada cliente de serviço usa por padrão a configuração de estratégia de novas tentativas standard fornecida pela estrutura RetryConfig. Por padrão, uma chamada será tentada três vezes (a tentativa inicial, mais duas tentativas). Além disso, cada nova tentativa será adiada por um período curto e aleatório para evitar tempestades de novas tentativas. Essa convenção é adequada para a maioria dos casos de uso, mas pode ser inadequada em circunstâncias específicas, como em sistemas de alto throughput.

Somente alguns tipos de erros são considerados para novas tentativas pelos SDKs. Exemplos de erros que podem ser repetidos são:

  • tempos limite de soquetes

  • controle de utilização do lado do serviço

  • erros de serviço transitórios, como respostas HTTP 5XX

Os exemplos a seguir não podem ser repetidos:

  • Parâmetros ausentes ou inválidos

  • erros de autenticação/segurança

  • exceções de configuração incorreta

É possível personalizar a estratégia standard de novas tentativas definindo o máximo de tentativas, atrasos e configuração de recuo.

Máximo de tentativas

Você pode personalizar o máximo de tentativas em seu código fornecendo uma modificação RetryConfig para aws_config::defaults:

const CUSTOM_MAX_ATTEMPTS: u32 = 5; let retry_config = RetryConfig::standard() // Set max attempts. When max_attempts is 1, there are no retries. // This value MUST be greater than zero. // Defaults to 3. .with_max_attempts(CUSTOM_MAX_ATTEMPTS); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;

Atrasos e recuo

Se uma nova tentativa for necessária, a estratégia de nova tentativa padrão aguarda antes de fazer a tentativa subsequente. O atraso na primeira tentativa é pequeno, mas cresce exponencialmente nas tentativas posteriores. A quantidade máxima de atraso é limitada para não aumentar muito.

A instabilidade aleatória é aplicada aos atrasos em todas as tentativas. A instabilidade ajuda a mitigar o efeito de grandes frotas que podem causar tempestades de novas tentativas. Para uma discussão mais aprofundada sobre recuo exponencial e instabilidade, consulte Exponential Backoff And Jitter no blog AWS Architecture.

Você pode personalizar as configurações de atraso em seu código fornecendo um RetryConfig modificado ao aws_config::defaults. O código a seguir define a configuração para atrasar a primeira nova tentativa em até 100 milissegundos e definir que o tempo máximo entre qualquer tentativa seja de 5 segundos.

let retry_config = RetryConfig::standard() // Defaults to 1 second. .with_initial_backoff(Duration::from_millis(100)) // Defaults to 20 seconds. .with_max_backoff(Duration::from_secs(5)); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;

Modo de nova tentativa adaptável

Como alternativa à estratégia de nova tentativa do modo standard, a estratégia de nova tentativa do modo adaptive é uma abordagem avançada que busca a taxa ideal de solicitações para minimizar os erros de controle de utilização.

nota

As novas tentativas adaptáveis são um modo de nova tentativa avançado. Normalmente é recomendável usar esta estratégia. Consulte Comportamento de repetição no Guia de referência de SDKs e ferramentas da AWS.

As novas tentativas adaptáveis incluem todos os recursos das novas tentativas padrão. Isso adiciona um limitador de taxa do lado do cliente que mede a taxa de solicitações de controle de utilização em comparação com solicitações sem o controle. Também limita o tráfego para tentar permanecer em uma largura de banda segura, o que, idealmente, não causa nenhum erro de controle de utilização.

A taxa se adapta em tempo real às mudanças nas condições de serviço e nos padrões de tráfego e pode aumentar ou diminuir a taxa de tráfego de acordo. Fundamentalmente, o limitador de taxa pode atrasar as tentativas iniciais em cenários de tráfego intenso.

Você pode selecionar a estratégia adaptive de novas tentativas no código fornecendo uma RetryConfig modificada:

let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(RetryConfig::adaptive()) .load() .await;