¿Por qué mi métrica de latencia máxima de Amazon DynamoDB es alta cuando la latencia media es normal?

Última actualización: 07-09-2022

Cuando reviso las métricas de Amazon CloudWatch para mis cargas de trabajo de Amazon DynamoDB, la métrica de latencia máxima es alta. Sin embargo, la latencia promedio es normal.

Resolución

Cuando analiza la métrica de CloudWatch SuccessfulRequestLatency, se recomienda comprobar la latencia promedio. La latencia máxima no ofrece una imagen de la latencia general en la tabla de DynamoDB. En cambio, muestra el tiempo máximo que tarda una sola solicitud en ese período. Por ejemplo, si tiene 100 solicitudes en una tabla de DynamoDB a la vez, incluso si 99 solicitudes tardan 10 ms y una sola solicitud tarda 100 ms, la métrica de latencia máxima es de 100 ms.

DynamoDB es un sistema de distribución a gran escala, con miles de nodos en la flota de backend. Por lo tanto, una tabla de DynamoDB puede tener varias particiones en el espacio de tablas y cada partición tiene varias copias en la flota de backend. Cuando realiza una llamada de API a DynamoDB, el punto de conexión del servicio de DynamoDB recibe la llamada y, a continuación, la enruta a uno de los nodos de backend para su procesamiento. Cuando la llamada se procesa correctamente, DyanamoDB envía los resultados de vuelta a su cliente.

En la mayoría de los casos, la llamada a la API se procesa correctamente en un solo intento y se observa una latencia pequeña en el lado del cliente. Sin embargo, a veces el primer intento falla si el nodo backend experimenta lo siguiente:

  • Un período ocupado
  • Conmutación por error
  • División de particiones
  • Problemas de conectividad
En casos como estos, el primer intento falla dentro de un tiempo de espera en el lado del servidor (5000 ms). A continuación, el servidor vuelve a intentar automáticamente la llamada a la API en otro nodo, a menudo varias veces. El servidor devuelve el resultado al cliente cuando la llamada a la API se procesa correctamente. Cuando esto ocurre, observa una latencia elevada para esa solicitud en particular.

Por lo tanto, una métrica de latencia máxima alta generalmente no es motivo de preocupación. Si el servicio de DynamoDB observa una latencia alta y constante de un nodo, el servicio elimina automáticamente ese componente de la flota de backend. Es posible que observe un nivel elevado de latencia para un determinado porcentaje de llamadas a la API cuando se produce el error localizado mencionado anteriormente en el lado del servicio. Esto se refleja en un alto nivel de SuccessfulRequestLatency máxima en las métricas de CloudWatch para las tablas de DynamoDB relacionadas. Por este motivo, los errores localizados pueden aumentar la latencia máxima, pero no es necesario que tome ninguna medida para controlar este error.

Sin embargo, puede configurar su aplicación para reaccionar con rapidez al responder rápido a los errores con un reintento de exponential backoff (retroceso exponencial). Esto significa que la nueva solicitud llega al nuevo nodo y se obtienen resultados más rápidos. 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).


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?