Como solucionar erros de tempo limite intermitentes no Amazon DynamoDB?
Quando uso o AWS SDK para interagir com o Amazon DynamoDB, vejo erros de tempo limite de conexão intermitente ou de tempo limite de solicitação, como os seguintes:
Não foi possível executar a solicitação HTTP: falha na conexão com dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x]: a conexão expirou com.amazonaws.SdkClientException: não foi possível executar a solicitação HTTP. A solicitação não foi concluída antes da configuração de tempo limite de solicitação
Resolução
Quando você faz uma chamada de API para o DynamoDB, acontece o seguinte:
- Sua aplicação resolve o endpoint do DynamoDB usando seu servidor de DNS local.
- Depois de obter o endereço IP do endpoint do DynamoDB, a aplicação se conecta ao endpoint e faz a chamada de API.
- O endpoint roteia essa chamada para um dos nós de backend.
Durante esse processo, a chamada de API pode resultar intermitentemente em erros de tempo limite de conexão ou de tempo limite de solicitação. Na maioria dos casos, o erro de tempo limite é resultante de um erro no lado do cliente que ocorre antes da chamada de API chegar ao DynamoDB devido a problemas de rede ou configurações incorretas do SDK no lado do cliente.
Para solucionar esses erros, faça o seguinte:
- Ajuste os parâmetros do cliente HTTP do SDK de acordo com seu caso de uso e o SLA da aplicação. Além de ajustar connectionTimeout, requestTimeout e maxRetries, você também pode ajustar clientExecutionTimeout e socketTimeout. O parâmetro ClientExecutionTimeout indica o tempo total máximo permitido para executar uma operação completa e receber a resposta desejada, incluindo quaisquer novas tentativas que possam ocorrer. Certifique-se de definir esse valor para ser maior do que o valor individual de requestTimeout. O parâmetro socketTimeout indica o tempo máximo que o cliente HTTP aguarda para receber uma resposta de uma conexão TCP já estabelecida. Para obter mais informações, consulte Ajustar configurações de solicitação HTTP do AWS Java SDK para aplicações do Amazon DynamoDB com reconhecimento de latência.
- Certifique-se de enviar tráfego constante ou reutilizar conexões. Quando não estiver fazendo solicitações, considere fazer com que o cliente envie tráfego fictício a uma tabela do DynamoDB. Ou você pode reutilizar conexões de cliente ou usar grupos de conexões. Essas técnicas mantêm os caches internos aquecidos, o que ajuda a reduzir a latência e evitar erros de tempo limite no lado do cliente. Por exemplo, consulte Reutilizar conexões com Keep-Alive no Node.js.
- Visualize seus logs de fluxo da Amazon Virtual Private Cloud (Amazon VPC) para verificar se houve tráfego de entrada para o DynamoDB durante o período em que você recebeu o erro. Também é possível usar o AWS X-Ray para monitorar a latência da sua aplicação.
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 5 meses
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 meses