¿Por qué aumenta la métrica IteratorAge de Lambda y cómo la reduzco?

7 minutos de lectura
0

Veo un aumento (o picos) en la métrica IteratorAge de mi función de AWS Lambda.

Descripción breve

La antigüedad del iterador de una función de Lambda aumenta cuando la función no puede procesar de manera eficiente los datos que se escriben en las secuencias que invocan la función. Para reducir la métrica IteratorAge de la función, debe aumentar el rendimiento del procesamiento de secuencias.

En la métrica IteratorAge de una función influyen los siguientes factores:

Revise este artículo para entender cómo afecta cada factor a la antigüedad del iterador. A continuación, reconfigure la función o la secuencia de datos para reducir la antigüedad del iterador de la función según su caso de uso. Para obtener más información sobre las invocaciones de Lambda, consulte Trabajo con las métricas de funciones de AWS Lambda.

Nota: Para Amazon DynamoDB Streams, consulte ¿Por qué aumenta la métrica IteratorAge de Lambda en mis flujos de Amazon DynamoDB Streams?

Solución

Disminuir la duración del tiempo de ejecución de la función

Una duración del tiempo de ejecución alta aumenta la antigüedad del iterador de una función. Si la duración disminuye, el rendimiento de una función aumenta, lo que reduce la antigüedad del iterador de la función.

Para reducir la duración del tiempo de ejecución de la función, lleve a cabo una de las siguientes acciones, o ambas:

1.    Aumentar la cantidad de memoria asignada a la función. Lambda asigna la potencia de la CPU en proporción a la memoria.

2.    Optimizar el código de su función para que los registros se procesen en menos tiempo.

Nota: Para más información sobre la duración y el rendimiento de Lambda, consulte Uso de AWS Lambda y AWS X-Ray.

Aumentar el tamaño del lote de la secuencia

Si la duración del tiempo de ejecución de la función es independiente del número de registros de un evento, al aumentar el tamaño del lote de la función, se reduce la antigüedad del iterador.

Para aumentar el tamaño del lote de la función, siga las instrucciones de Configuración de una secuencia como un origen de eventos.

Nota: Si la duración de la función depende de la cantidad de registros de un evento, aumentar el tamaño del lote de la función no reduce la antigüedad del iterador. Para obtener más información, consulte Trabajo con secuencias.

Asegurarse de que la función gestione correctamente los errores de invocación

Los errores de invocación pueden provocar que una función de Lambda tarde más en procesar un evento o que procese el mismo evento más de una vez. Como los registros de eventos se leen de forma secuencial, una función no puede avanzar a registros posteriores si un lote de registros provoca un error cada vez que se vuelve a intentar. En esta situación, la antigüedad del iterador aumenta linealmente a medida que los registros envejecen.

Si la función devuelve un error, Lambda vuelve a intentar el lote de forma continua. La repetición de intentos por lotes continúa hasta que el procesamiento se haga correctamente, se alcance el número máximo de reintentos o los datos de la secuencia caduquen.

Asegúrese de que la función gestione correctamente los registros escritos en la secuencia. A medida que desarrolle su función, registrar e instrumentar el código pueden ayudarle a diagnosticar errores.

Para obtener más información, consulte los siguientes artículos:

Gestionar la aparición de limitaciones

Como los registros de eventos se leen de forma secuencial, una función no puede avanzar al siguiente registro si la invocación actual está limitada. En esta situación, la antigüedad del iterador aumentará mientras Lambda vuelve a intentar las invocaciones limitadas.

Para gestionar las limitaciones de la función de Lambda, puede solicitar un aumento de la simultaneidad o revisar los problemas de rendimiento de la función.

Distribuir los registros de manera uniforme en la secuencia

Las claves de partición de cada registro de datos determinan las particiones de la secuencia en las que se escriben los registros. Un aumento en el tráfico de la secuencia con registros que contienen la misma clave de partición hace que una partición reciba una cantidad desproporcionada de registros. Esto da como resultado una partición caliente.

Las métricas mejoradas de Kinesis a nivel de partición le permiten verificar la tasa de ingesta de cada partición y solucionar los problemas de una partición caliente.

Para obtener más información, consulte Apunte técnico: escalado de las secuencias de datos de Kinesis.

Aumentar el recuento de particiones de la secuencia

Un número bajo de particiones en una secuencia aumenta la antigüedad del iterador de una función. Al incrementar el número de particiones de una secuencia, aumenta la cantidad de funciones de Lambda simultáneas que consumen la secuencia, lo que reduce la antigüedad del iterador de la función.

Para aumentar el número de particiones de la secuencia, siga las instrucciones de Refragmentación de una secuencia.

Nota: La división de particiones no tiene un efecto inmediato en la antigüedad del iterador de una función. Los registros actuales permanecen en las particiones en las que se escribieron. Esas particiones deben ponerse al día con las solicitudes pendientes antes de que disminuya la edad del iterador de las particiones. Para obtener más información, consulte Trabajo con secuencias.

Aumente el rendimiento del procesamiento de secuencias al probar diferentes configuraciones de factores de paralelización y utilizar una distribución mejorada

Para probar la configuración del factor de paralelización

Puede mejorar el procesamiento de secuencias configurando el factor de paralelización de la función para que aumente el número de invocaciones de Lambda simultáneas de cada partición de una secuencia. Para ello, especifique el número de lotes simultáneos que Lambda extrae de cada partición. Esto se configura en la configuración del origen de eventos.

Si el factor de paralelización está establecido en 10, puede tener hasta 50 invocaciones de Lambda simultáneas para procesar cinco particiones de datos de Kinesis.

Por ejemplo, ejecuciones simultáneas = número de particiones x lotes simultáneos por partición (factor de paralelización).

Para obtener más información, consulte Uso de AWS Lambda con Amazon Kinesis y Nuevos controles de escalado de AWS Lambda para los orígenes de eventos de Kinesis y Amazon DynamoDB.

Nota: Al aumentar el número de lotes simultáneos por partición, Lambda valida el procesamiento en orden a nivel de clave de partición.

Para utilizar la distribución ramificada mejorada

Puede reducir la latencia y aumentar el rendimiento de lectura mediante la creación de un consumidor de secuencia de datos con una distribución ramificada mejorada. Los consumidores de secuencias obtienen una conexión dedicada a cada partición, lo que no afecta a otras aplicaciones que también leen la secuencia.

Para obtener más información, consulte Desarrollo de consumidores personalizados con rendimiento dedicado (distribución ramificada mejorada) y Uso de AWS Lambda con Amazon Kinesis.

Nota: Se recomienda utilizar la distribución ramificada mejorada si tiene muchas aplicaciones que leen los mismos datos o si está volviendo a procesar secuencias con registros de gran tamaño.

Información relacionada

Prácticas recomendadas para trabajar con funciones AWS Lambda

Asignación de origen de eventos de Lambda

Escalado de la función de Lambda

Refragmentación, escalado y procesamiento paralelo

Configurar su flujo de datos y función

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año