Comportamento de repetição - AWS SDKs e ferramentas

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á.

Comportamento de repetição

nota

Para obter ajuda em compreender o layout das páginas de configurações ou interpretar a tabela Compatibilidade com SDKs e ferramentas da AWS a seguir, consulte Entender as páginas de configurações deste guia.

O comportamento de repetição inclui configurações sobre como os SDKs tentam se recuperar de falhas resultantes de solicitações feitas para os Serviços da AWS.

Configure essa funcionalidade usando o seguinte:

retry_mode: configuração de arquivo config da AWS compartilhado
AWS_RETRY_MODE: variável de ambiente
aws.retryMode: propriedade do sistema de JVM: apenas Java/Kotlin

Especifica como o SDK ou a ferramenta de desenvolvedor tenta novas tentativas.

Valor padrão: esse valor é específico do SDK. Consulte o guia do SDK específico ou a base de código do SDK para obter o retry_mode padrão.

Valores válidos:

  • standard: (Recomendado) O conjunto recomendado de regras de repetição de tentativas em todos os SDKs da AWS. Esse modo inclui um conjunto padrão de erros que geram novas tentativas e ajusta automaticamente o número de tentativas para maximizar a disponibilidade e a estabilidade. Esse modo é seguro para uso em aplicações multilocatárias. O número máximo padrão de tentativas com esse modo é três, a menos que max_attempts esteja explicitamente configurado.

  • adaptive: um modo de repetição de tentativas, apropriado somente para casos de uso especializados, que inclui a funcionalidade do modo padrão, bem como a limitação automática de taxa do lado do cliente. Esse modo de repetição de tentativas não é recomendado para aplicações multilocatárias, a menos que você tenha o cuidado de isolar os locatários da aplicação. Consulte Escolher entre os modos de repetição de tentativas standard e adaptive para obter mais informações. Esse modo é experimental e pode mudar de comportamento no futuro.

  • legacy: (Não Recomendado) específico para o SDK (consulte o guia específico do SDK ou a base de código do seu SDK).

max_attempts: configuração de arquivo config da AWS compartilhado
AWS_MAX_ATTEMPTS: variável de ambiente
aws.maxAttempts: propriedade do sistema de JVM: apenas Java/Kotlin

Especifica o número máximo de tentativas a serem feitas em uma solicitação.

Valor padrão: se esse valor não for especificado, seu padrão dependerá do valor da configuração retry_mode:

  • Se retry_mode for legacy: usa um valor padrão específico para seu SDK (consulte o guia de seu SDK específico ou a base de código do seu SDK para ver o max_attempts padrão).

  • Se retry_mode for standard: faz três tentativas.

  • Se retry_mode for adaptive: faz três tentativas.

Valores válidos: número maior que zero.

Escolher entre os modos de repetição de tentativas standard e adaptive

Recomendamos que você use o modo de repetição de tentativas standard, a menos que tenha certeza de que seu uso é mais adequado para o modo adaptive.

nota

O modo adaptive pressupõe que você esteja agrupando clientes com base no escopo em que o serviço de backend pode controlar as solicitações. Se você não fizer isso, os controles de utilização em um recurso podem atrasar as solicitações de um recurso não relacionado se você estiver usando o mesmo cliente para os dois recursos.

Padrão Adaptativo
Casos de uso da aplicação: todos. Casos de uso da aplicação:
  1. Não sensível a latência.

  2. O cliente acessa apenas um único recurso ou você está fornecendo lógica para agrupar os clientes separadamente pelo recurso de serviço que está sendo acessado.

Compatível com interrupção de circuito para evitar que o SDK tente novamente durante uma interrupção no fornecimento. Compatível com interrupção de circuito para evitar que o SDK tente novamente durante uma interrupção no fornecimento.
Usa um recuo exponencial instável em caso de falhas. Usa durações dinâmicas de recuo para tentar minimizar o número de solicitações com falha, em troca do potencial aumento de latência.
Nunca atrasa a primeira tentativa de solicitação, apenas as novas tentativas. Pode controlar a utilização ou atrasar a tentativa de solicitação inicial.

Se você escolher o modo adaptive, sua aplicação deverá construir clientes projetados com base em cada recurso cuja utilização possa estar sendo controlada. Um recurso, nesse caso, tem um ajuste mais fino do que apenas levar em conta cada AWS service (Serviço da AWS). Os Serviços da AWS podem ter dimensões adicionais que usam para controlar a utilização das solicitações. Vamos usar o serviço Amazon DynamoDB como exemplo. O DynamoDB usa a Região da AWS mais a tabela que está sendo acessada para controlas a utilização das solicitações. Isso significa que uma tabela que o código está acessando pode sofrer mais controle de utilização que outras. Se o código tiver usado o mesmo cliente para acessar todas as tabelas e a utilização de solicitações para uma dessas tabelas for controlada, o modo adaptativo de repetição de tentativas reduzirá a taxa de solicitações de todas as tabelas. O código deve ser projetado para ter um único cliente por par de região e tabela. Se observar latência inesperada ao usar o modo adaptive, consulte o guia da documentação da AWS específico para o serviço que você está usando.

Detalhes da implementação do modo de repetição de tentativas

Os SDKs da AWS usam buckets de tokens para decidir se uma solicitação deve ser repetida e (no caso do modo de repetição adaptive) com que rapidez as solicitações devem ser enviadas. Dois buckets de tokens são usados pelo SDK: um bucket de tokens de repetição de tentativas e um bucket de tokens de taxa de solicitações.

  • O bucket de tokens de repetição de tentativas é usado para determinar se o SDK deve desabilitar temporariamente as novas tentativas para proteger os serviços upstream e downstream durante interrupções de fornecimento. Os tokens são obtidos do bucket antes que sejam feitas novas tentativas, e os tokens são devolvidos ao bucket quando as solicitações são bem-sucedidas. Se o bucket estiver vazio quando for feita uma nova tentativa, o SDK não repetirá a solicitação.

  • O bucket de tokens da taxa de solicitações é usado apenas no modo adaptive de repetição de tentativas para determinar a taxa de envio das solicitações. Os tokens são obtidos no bucket antes do envio de uma solicitação, e os tokens são devolvidos ao bucket a uma taxa determinada dinamicamente com base nas respostas de controle de utilização retornadas pelo serviço.

A seguir está o pseudocódigo de alto nível para os modos de repetição de repetição standard e adaptive:

MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }

A seguir estão mais detalhes sobre os componentes usados no pseudocódigo:

GetSendToken:

Essa etapa é usada apenas no modo adaptive de repetição de tentativas. Essa etapa obtém um token do bucket de tokens de taxa de solicitações. Se um token não estiver disponível, aguardará até que um fique disponível. O SDK pode ter opções de configuração disponíveis para considerar que houve falha na solicitação em vez de esperar. Os tokens no bucket são recarregados a uma taxa determinada dinamicamente, com base no número de respostas de controle de utilização recebidas pelo cliente.

SendHTTPRequest:

Esta etapa envia a solicitação para a AWS. A maioria dos SDKs da AWS usa uma biblioteca HTTP que usa grupos de conexões para reutilizar uma conexão existente ao fazer uma solicitação HTTP. Geralmente, as conexões são reutilizadas se houver falha em uma solicitação devido a erros de controle de utilização, mas não se a falha da solicitação ocorrer devido a um erro transitório.

RequestBookkeeping:

Os tokens serão adicionados ao bucket de tokens se a solicitação for bem-sucedida. Somente para o modo adaptive de repetição de tentativas, a taxa de preenchimento do bucket de tokens de taxa de solicitações é atualizada com base no tipo de resposta recebida.

Retryable:

Essa etapa determina se uma resposta pode ser repetida com base no seguinte:

  • Código de status do HTTP.

  • O código de erro retornado do serviço.

  • Erros de conexão, definidos como qualquer erro recebido pelo SDK no qual uma resposta HTTP do serviço não é recebida.

Erros transitórios (códigos de status HTTP 400, 408, 500, 502, 503 e 504) e erros de controle de utilização (códigos de status HTTP 400, 403, 429, 502, 503 e 509) podem potencialmente ser repetidos. O comportamento de repetição do SDK é determinado em combinação com códigos de erro ou outros dados do serviço.

MAX_ATTEMPTS:

O número padrão de máximo de tentativas é definido pela configuração retry_mode, a menos que seja substituído pela configuração max_attempts.

HasRetryQuota

Essa etapa obtém um token do bucket de tokens de repetição de tentativas. Se o bucket de tokens de repetição de tentativas estiver vazio, a solicitação não será repetida.

ExponentialBackoff

Para um erro que pode ser repetido, o atraso da nova tentativa é calculado usando o recuo exponencial truncado. Os SDKs usam recuo exponencial binário truncado com instabilidade. O algoritmo a seguir mostra como a quantidade de tempo de sono, em segundos, é definida para uma resposta à solicitação i:

seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)

No algoritmo anterior, os seguintes valores se aplicam:

b = random number within the range of: 0 <= b <= 1

r = 2

MAX_BACKOFF = 20 seconds para a maioria dos SDKs. Consulte o guia específico do SDK ou o código-fonte para confirmação.

Compatibilidade com SDKs e ferramentas da AWS

Os SDKs a seguir são compatíveis com os recursos e configurações descritos neste tópico. Quaisquer exceções parciais estão anotadas. As configurações de propriedade do sistema de JVM são compatíveis apenas como o AWS SDK para Java e o AWS SDK para Kotlin.

SDK Compatível Notas ou mais informações
AWS CLI v2 da2 Sim
SDK para C++ Sim
SDK para Go V2 (1.x) Sim
SDK para Go 1.x (V1) Não
SDK para Java 2.x Sim
SDK para Java 1.x Sim Propriedades de sistema JVM: use com.amazonaws.sdk.maxAttempts em vez de aws.maxAttempts; use com.amazonaws.sdk.retryMode em vez de aws.retryMode.
SDK para JavaScript 3.x Sim
SDK para JavaScript 2.x Não Suporta um número máximo de novas tentativas, recuo exponencial com instabilidade e a opção de um método personalizado para recuar novamente.
SDK para Kotlin Sim
SDK para .NET 4.x Sim
SDK para .NET 3.x Sim
SDK para PHP 3.x Sim
SDK para Python (Boto3) Sim
SDK para Ruby 3.x Sim
SDK para Rust Sim
SDK para Swift Sim
Ferramentas para PowerShell V5 Sim
Ferramentas para PowerShell V4 Sim