Solución de problemas de latencia en Amazon DynamoDB - Amazon DynamoDB

Solución de problemas de latencia en Amazon DynamoDB

Si su carga de trabajo parece experimentar una latencia elevada, puede analizar la métrica SuccessfulRequestLatency de CloudWatch y comprobar la latencia media para ver si está relacionada con DynamoDB. Es normal que haya cierta variabilidad en SuccessfulRequestLatency notificado y los picos ocasionales (en concreto en la estadística de Maximum) no deben ser motivo de preocupación. No obstante, si la estadística de Average muestra un fuerte aumento y persiste, debe consultar el panel de estado del servicio de AWS y su panel de estado personal para obtener más información. Algunas causas posibles son el tamaño del elemento de su tabla (un elemento de 1 KB y otro de 400 KB variarán en latencia) o el tamaño de la consulta (10 elementos frente a 100 elementos).

Si es necesario, considere la posibilidad de abrir un caso de soporte con AWS Support y siga evaluando las opciones de emergencia disponibles para su aplicación (como la evacuación de una región si tiene una arquitectura multirregión) de acuerdo con sus manuales de procedimientos. Debes registrar los ID de solicitud de las solicitudes lentas para proporcionarlos a AWS Support cuando cree un caso de asistencia.

La métrica SuccessfulRequestLatency solo mide la latencia interna del servicio DynamoDB; no se incluyen la actividad del cliente ni los tiempos de ida y vuelta de la red. Para obtener más información sobre la latencia global de las llamadas de su cliente al servicio DynamoDB, puede activar el registro de métricas de latencia en su SDK de AWS.

nota

Para la mayoría de las operaciones singleton (operaciones que se aplican a un único elemento mediante la especificación completa del valor de la clave principal), DynamoDB proporciona Average SuccessfulRequestLatency milisegundos de un solo dígito. Este valor no incluye la sobrecarga de transporte para el código de llamada que accede al punto de conexión de DynamoDB. En el caso de las operaciones con datos de varios elementos, la latencia variará en función de factores como el tamaño del conjunto de resultados, la complejidad de las estructuras de datos devueltas y las expresiones de condición y de filtro aplicadas. Para operaciones repetidas de varios elementos al mismo conjunto de datos con los mismos parámetros, DynamoDB proporcionará Average SuccessfulRequestLatency de alta coherencia.

Considere una o más de las siguientes estrategias para reducir la latencia:

  • Ajustar el tiempo de espera de la solicitud y el comportamiento de reintentos: la ruta desde su cliente a DynamoDB atraviesa muchos componentes, cada uno de los cuales está diseñado teniendo en cuenta la redundancia. Piense en el alcance de la resiliencia de la red, los tiempos de espera de los paquetes TCP y la propia arquitectura distribuida de DynamoDB. Los comportamientos predeterminados del SDK están diseñados para encontrar el equilibrio adecuado para la mayoría de las aplicaciones. Si la mejor latencia posible es su mayor prioridad, debería considerar ajustar la configuración predeterminada de tiempo de espera de la solicitud y de reintentos de su SDK para que se ajuste lo más posible a la latencia típica para una solicitud correcta medida por su cliente. Una solicitud que esté tardando mucho más de lo normal tiene menos probabilidades de realizarse correctamente en última instancia; si responde rápido a los errores y realiza una nueva solicitud, es probable que esta siga una ruta diferente y pueda realizarse correctamente de forma rápida. Tenga en cuenta que adoptar un enfoque demasiado dinámico en estas configuraciones puede tener sus inconvenientes. Encontrará un análisis útil sobre este tema en Ajuste de la configuración de solicitudes HTTP del SDK de Java de AWS para aplicaciones de Amazon DynamoDB basadas en latencia.

  • Reducir la distancia entre el cliente y el punto de conexión de DynamoDB: si tiene usuarios dispersos por todo el mundo, considere la posibilidad de utilizar Tablas globales: replicación en varias regiones para DynamoDB. Con las tablas globales, puede especificar las regiones de AWS en las que desea que esté disponible la tabla. La lectura de datos de una réplica local de tablas globales puede reducir considerablemente la latencia para sus usuarios. Asimismo, considere la posibilidad de utilizar un punto de conexión de puerta de enlace de DynamoDB para mantener el tráfico de clientes dentro de su VPC.

  • Usar el almacenamiento en caché: si tiene mucho tráfico de lectura, considere la posibilidad de utilizar un servicio de almacenamiento en caché, como Aceleración en memoria con DynamoDB Accelerator (DAX). DAX es una caché en memoria altamente disponible y completamente administrada para DynamoDB que multiplica el rendimiento hasta por diez (de milisegundos a microsegundos) incluso con millones de solicitudes por segundo.

  • Reutilizar conexiones: las solicitudes de DynamoDB se realizan a través de una sesión autenticada que, de forma predeterminada, es HTTPS. Iniciar la conexión lleva tiempo, por lo que la latencia de la primera solicitud es superior a la típica. Las solicitudes a través de una conexión ya inicializada ofrecen la baja latencia coherente de DynamoDB. Por este motivo, puede que desee realizar una solicitud GetItem “keep-alive” cada 30 segundos si no se realizan otras solicitudes, para evitar la latencia de establecer una nueva conexión.

  • Usar lecturas coherentes posteriores: si su aplicación no requiere lecturas altamente coherentes, considere la posibilidad de utilizar las lecturas coherentes posteriores predeterminadas. Las lecturas coherentes posteriores son de menor costo y también es menos probable que experimenten aumentos transitorios de latencia. Para obtener más información, consulte Coherencia de lectura.