Mejora del rendimiento de inicio con Lambda SnapStart - AWS Lambda

Mejora del rendimiento de inicio con Lambda SnapStart

Lambda SnapStart puede ofrecer un rendimiento de inicio en menos de un segundo, normalmente sin cambios en el código de la función. SnapStart facilita la creación de aplicaciones con alta capacidad de respuesta y escalables sin aprovisionar recursos ni implementar optimizaciones de rendimiento complejas.

El factor que más contribuye a la latencia de inicio (a menudo denominado tiempo de inicio en frío) es el tiempo que Lambda dedica a inicializar la función, que incluye cargar el código de la función, iniciar el tiempo de ejecución e inicializar el código de la función. Con SnapStart, Lambda inicializa la función al publicar una versión de la función. Lambda toma una instantánea de Firecracker microVM del estado de la memoria y el disco correspondientes al entorno de ejecución inicializado, cifra la instantánea y la almacena en caché de manera inteligente para optimizar la latencia de recuperación.

Para garantizar la resiliencia, Lambda mantiene varias copias de cada instantánea. Lambda aplica automáticamente parches a las instantáneas y sus copias con las últimas actualizaciones de tiempo de ejecución y seguridad. Al invocar la versión de la función por primera vez y a medida que las invocaciones escalan verticalmente, Lambda reanuda los nuevos entornos de ejecución a partir de la instantánea almacenada en caché, en lugar de inicializarlos desde cero, lo que mejora la latencia de inicio.

importante

Si sus aplicaciones dependen de la singularidad del estado, debe evaluar el código de su función y comprobar que es resistente a las operaciones de instantáneas. Para obtener más información, consulte Control de la exclusividad con Lambda SnapStart.

Cuándo usar SnapStart

Lambda SnapStart está diseñado para abordar la variabilidad de latencia que introduce el código de inicialización único, como la carga de estructuras o dependencias de módulos. En ocasiones, estas operaciones pueden tardar varios segundos en completarse durante la invocación inicial. Utilice SnapStart para reducir esta latencia de varios segundos a tan solo menos de un segundo, en escenarios óptimos. SnapStart funciona mejor cuando se usa con invocaciones de funciones a escala. Es posible que las funciones que se invocan con poca frecuencia no experimenten las mismas mejoras de rendimiento.

SnapStart es particularmente útil para dos tipos principales de aplicaciones:

  • Flujos de usuarios y API sensibles a la latencia: las funciones que forman parte de los puntos de conexión críticos de las API o de los flujos orientados al usuario pueden beneficiarse de la reducción de la latencia y la mejora de los tiempos de respuesta de SnapStart.

  • Flujos de trabajo de procesamiento de datos sensibles a la latencia: los flujos de trabajo de procesamiento de datos con límite de tiempo que utilizan funciones de Lambda pueden lograr un mejor rendimiento al reducir la latencia de inicialización de funciones atípicas.

La simultaneidad aprovisionada mantiene las funciones inicializadas y listas para responder en cuestión de milisegundos de dos dígitos. Utilice la simultaneidad aprovisionada si su aplicación tiene requisitos estrictos de latencia para los inicios en frío y no los puede abordar de forma adecuada con SnapStart.

Características y limitaciones compatibles

SnapStart está disponible para los siguientes tiempos de ejecución administrados por Lambda:

No se admiten otros tiempos de ejecución administrados (como nodejs22.x y ruby3.3), Tiempos de ejecución exclusivos del sistema operativo, ni imágenes de contenedor

SnapStart no admite la simultaneidad aprovisionada, Amazon Elastic File System (Amazon EFS), ni almacenamiento efímero de más de 512 MB.

nota

Puede usar SnapStart solo en las versiones de funciones publicadas y en los alias que apunten a versiones. No puede usar SnapStart en la versión no publicada de una función ($LATEST).

Regiones compatibles

Para los tiempos de ejecución de Java, Lambda SnapStart está disponible en todas las regiones comerciales, excepto en Asia-Pacífico (Malasia).

Para los entornos de ejecución de Python y .NET, Lambda SnapStart está disponible en las siguientes Regiones de AWS:

  • Este de EE. UU. (Norte de Virginia)

  • Este de EE. UU. (Ohio)

  • Oeste de EE. UU. (Oregón)

  • Asia Pacífico (Singapur)

  • Asia-Pacífico (Sídney)

  • Asia-Pacífico (Tokio)

  • Europa (Fráncfort)

  • Europa (Irlanda)

  • Europa (Estocolmo)

Consideraciones sobre compatibilidad

Con SnapStart, Lambda utiliza una única instantánea como estado inicial para varios entornos de ejecución. Si la función utiliza alguno de los siguientes factores durante la fase de inicialización, es posible que deba realizar algunos cambios antes de usar SnapStart:

Singularidad

Si el código de inicialización genera contenido único que se incluye en la instantánea, es posible que el contenido no lo sea cuando se reutilice en los entornos de ejecución. Para mantener la exclusividad al utilizar SnapStart, debe generar contenido único después de la inicialización. Esto incluye ID y secretos únicos y entropía que se utiliza para generar pseudoaleatoriedad. Para aprender a restaurar la singularidad, consulte Control de la exclusividad con Lambda SnapStart.

Conexiones de red

El estado de las conexiones que establece la función durante la fase de inicialización no está garantizado cuando Lambda vuelve a activar la función a partir de una instantánea. Valide el estado de sus conexiones de red y vuelva a establecerlas según sean necesarias. En la mayoría de los casos, las conexiones de red que establece un SDK de AWS se reanudan automáticamente. Para otras conexiones, consulte las prácticas recomendadas.

Datos temporales

Algunas funciones descargan o inicializan datos efímeros, como credenciales temporales o marcas temporales almacenadas en caché, durante la fase de inicialización. Actualice los datos efímeros en el controlador de funciones antes de usarlos, incluso cuando no utilice SnapStart.

Precios de SnapStart

nota

En el caso de los tiempos de ejecución administrados por Java, no se aplica ningún costo adicional por usar SnapStart. Se le cobrará en función del número de solicitudes de tus funciones, del tiempo que el código tarda en ejecutarse y de la memoria configurada para la función.

El costo de usar SnapStart incluye lo siguiente:

  • Almacenamiento en caché: por cada versión de función que publique con SnapStart habilitado, pagará el costo del almacenamiento en caché y el mantenimiento de la instantánea. El precio depende de la cantidad de memoria que asigne a la función. Se cobrará por un mínimo de 3 horas. Aún incurrirá en cargos mientras la función permanezca activa. Utilice la acción de la API ListVersionsByFunction para identificar las versiones de las funciones y, a continuación, utilice DeleteFunction para eliminar las versiones no utilizadas. Para eliminar automáticamente las versiones de funciones no utilizadas, consulte el patrón de limpieza de versiones de Lambda en Land sin servidor.

  • Restauración: cada vez que se restaure una instancia de función a partir de una instantánea, paga un cargo de restauración. El precio depende de la cantidad de memoria que asigne a la función.

Como ocurre con todas las funciones de Lambda, los cargos por duración se aplican al código que se ejecuta en el controlador de funciones. Para las funciones de SnapStart, también se aplican cargos por duración al código de inicialización declarado fuera del controlador, al tiempo que tarda en cargarse el entorno de ejecución y a cualquier código que se ejecute en un enlace del tiempo de ejecución. La duración se calcula desde el momento en que el código comienza a ejecutarse hasta que devuelve resultados o finaliza de algún otro modo, y se redondea al milisegundo más cercano. Lambda mantiene copias en caché de la instantánea para garantizar su resiliencia y les aplica automáticamente las actualizaciones de software, como las actualizaciones de tiempo de ejecución y los parches de seguridad. Se aplican cargos cada vez que Lambda vuelva a ejecutar su código de inicialización para aplicar actualizaciones de software.

Para obtener más información sobre el costo de usar SnapStart, consulte Precios de AWS Lambda.