Comment résoudre les erreurs de délai d'expiration intermittente dans Amazon DynamoDB ?

Dernière mise à jour : 19/08/2022

Lorsque j'utilise le kit SDK AWS pour interagir avec Amazon DynamoDB, je constate des erreurs de délai de connexion intermittente ou de délai d'expiration de demande, telles que les suivantes :

  • Impossible d'exécuter la requête HTTP : la connexion à dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] a échoué : la connexion a expiré
  • com.amazonaws.SdkClientException: impossible d'exécuter la requête HTTP. La demande ne s'est pas terminée avant la configuration du délai d'expiration de la requête

Solution

Lorsque vous effectuez un appel d'API à DynamoDB, voici ce qui se produit :

  1. Votre application résout le point de terminaison DynamoDB à l'aide de votre serveur DNS local.
  2. Après avoir obtenu l'adresse IP du point de terminaison DynamoDB, l'application se connecte au point de terminaison et effectue l'appel d'API.
  3. Le point de terminaison achemine cet appel vers l'un des nœuds backend.

Au cours de ce processus, l'appel d'API peut entraîner par intermittence des erreurs de délai d'expiration de connexion ou de délai d'expiration de requête. Dans la plupart des cas, l'erreur de délai d'expiration résulte d'une erreur côté client qui se produit avant que l'appel d'API n'atteigne DynamoDB en raison de problèmes de réseau ou de configurations incorrectes du kit SDK côté client.

Pour résoudre ces erreurs, procédez comme suit :

  • Réglez les paramètres du client HTTP du kit SDK en fonction de votre cas d'utilisation et du contrat de niveau de service (SLA) de votre application. En plus de régler connectionTimeout, requestTimeout et maxRetries, vous pouvez également régler clientExecutionTimeout et socketTimeout. Le paramètre ClientExecutionTimeout indique le temps total maximal autorisé pour effectuer une opération de bout en bout et recevoir la réponse souhaitée, y compris les éventuelles tentatives. Assurez-vous de définir cette valeur pour qu'elle soit supérieure à la valeur individuelle de requestTimeout. Le paramètre socketTimeout indique la durée maximale pendant laquelle le client HTTP attend de recevoir une réponse d'une connexion TCP déjà établie. Pour plus d'informations, consultez Réglage des paramètres de demande HTTP du kit AWS Java SDK pour les applications Amazon DynamoDB prenant en charge la latence.
  • Veillez à envoyer un trafic constant ou à réutiliser les connexions. Lorsque vous n'effectuez pas de requête, pensez à faire en sorte que le client envoie le trafic fictif vers une table DynamoDB. Ou vous pouvez réutiliser les connexions client ou utiliser le regroupement de connexions. Ces techniques maintiennent les caches internes réactifs, ce qui permet de réduire la latence et d'éviter les erreurs de délai d'expiration du côté client. Par exemple, consultez Réutilisation des connexions avec Keep-Alive dans Node.js.
  • Consultez vos journaux de flux Amazon Virtual Private Cloud (Amazon VPC) pour vérifier s'il y a eu du trafic entrant vers DynamoDB pendant la période où vous avez reçu l'erreur. Vous pouvez également utiliser AWS X-Ray pour surveiller la latence de votre application.

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?