¿Cómo soluciono los errores de tiempo de espera intermitente en Amazon DynamoDB?

3 minutos de lectura
0

Cuando uso el SDK de AWS para interactuar con Amazon DynamoDB, veo errores de tiempo de espera de conexión intermitente o de tiempo de espera de solicitud, como los siguientes:

Unable to execute HTTP request: Connect to dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] failed: connect timed out (No se pudo ejecutar la solicitud HTTP: error de conexión a dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x]: se agotó el tiempo de espera de conexión) com.amazonaws.SdkClientException: Unable to execute HTTP request (com.amazonaws.SdkClientException: no se puede ejecutar la solicitud HTTP). La solicitud no se completó antes de la configuración del tiempo de espera de solicitud

Resolución

Cuando realiza una llamada de API a DynamoDB, ocurre lo siguiente:

  1. La aplicación resuelve el punto de conexión de DynamoDB mediante el servidor DNS local.
  2. Tras obtener la dirección IP del punto de conexión de DynamoDB, la aplicación se conecta al punto de conexión y realiza la llamada a la API.
  3. El punto de conexión dirige esta llamada a uno de los nodos de backend.

Durante este proceso, la llamada a la API puede provocar de manera intermitente errores de tiempo de espera de conexión o de tiempo de espera de solicitud. En la mayoría de los casos, el error de tiempo de espera se debe a un error del lado del cliente que se produce antes de que la llamada a la API llegue a DynamoDB debido a problemas de red o configuraciones de SDK incorrectas en el lado del cliente.

Para solucionar estos errores, haga lo siguiente:

  • Ajuste los parámetros del cliente HTTP del SDK según su caso de uso y el SLA de la aplicación. Además de ajustar los valores de ConnectionTimeout, RequestTimeout y MaxRetries, también puede ajustar ClientExecutionTimeout y SocketTimeout. El parámetro ClientExecutionTimeout indica el tiempo total máximo permitido dedicado a realizar una operación de extremo a extremo y recibir la respuesta deseada, incluidos los reintentos que puedan producirse. Asegúrese de configurar este valor para que sea mayor que el valor individual de RequestTimeout. El parámetro SocketTimeout indica la cantidad máxima de tiempo que espera el cliente HTTP para recibir una respuesta de una conexión TCP ya establecida. Para obtener más información, consulte Tuning AWS Java SDK HTTP request settings for latency-aware Amazon DynamoDB applications (Ajuste de la configuración de solicitudes HTTP del SDK de Java de AWS para aplicaciones de Amazon DynamoDB sensibles a la latencia).
  • Asegúrese de enviar tráfico constante o reutilizar las conexiones. Cuando no esté realizando solicitudes, considere la posibilidad de que el cliente envíe tráfico ficticio a una tabla de DynamoDB. También puede reutilizar las conexiones de clientes o usar la agrupación de conexiones. Estas técnicas mantienen activas las cachés internas, lo que ayuda a reducir la latencia y evitar errores de tiempo de espera en el lado del cliente. Por ejemplo, consulte Reusing connections with Keep-Alive in Node.js (Reutilización de conexiones con Keep-Alive en Node.js).
  • Consulte los registros de flujo de Amazon Virtual Private Cloud (Amazon VPC) para comprobar si había tráfico entrante a DynamoDB durante el período en que se produjo el error. También puede usar AWS X-Ray para supervisar la latencia de su aplicación.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años