Mejora del rendimiento de inicio con Lambda SnapStart - AWS Lambda

Mejora del rendimiento de inicio con Lambda SnapStart

Lambda SnapStart para Java puede mejorar hasta 10 veces el rendimiento de inicio en las aplicaciones con exigencias en materia de latencia, sin costo adicional y normalmente sin cambios en el código de la función. 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é para acceder a ella con baja latencia. 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 Cómo gestionar la exclusividad con Lambda SnapStart.

Características y limitaciones compatibles

SnapStart admite Java 11 y los tiempos de ejecución administrados de Java posteriores. No se admiten otros tiempos de ejecución administrados (como nodejs20.x y python3.12), Tiempos de ejecución exclusivos del sistema operativo, ni imágenes de contenedor

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

Para trabajar con SnapStart, puede utilizar la consola de Lambda, la AWS Command Line Interface (AWS CLI), la API de Lambda, AWS SDK for Java, el servicio AWS CloudFormation, AWS Serverless Application Model (AWS SAM) y AWS Cloud Development Kit (AWS CDK). Para obtener más información, consulte Activación y administración de Lambda SnapStart.

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 admitidas

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. (Norte de California)

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

  • África (Ciudad del Cabo)

  • Asia-Pacífico (Hong Kong)

  • Asia-Pacífico (Mumbai)

  • Asia-Pacífico (Hyderabad)

  • Asia-Pacífico (Tokio)

  • Asia-Pacífico (Seúl)

  • Asia-Pacífico (Osaka)

  • Asia-Pacífico (Singapur)

  • Asia-Pacífico (Sídney)

  • Asia-Pacífico (Yakarta)

  • Asia-Pacífico (Melbourne)

  • Canadá (centro)

  • Europa (Estocolmo)

  • Europa (Fráncfort)

  • Europa (Zúrich)

  • Europa (Irlanda)

  • Europa (Londres)

  • Europa (París)

  • Europa (Milán)

  • Europa (España)

  • Medio Oriente (EAU)

  • Medio Oriente (Baréin)

  • América del Sur (São Paulo)

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 Cómo gestionar 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

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. 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.

Los cargos por la duración se aplican al código que se ejecuta en el controlador de funciones, al código de inicialización que se declara fuera del controlador, al periodo que tarda en cargarse el tiempo de ejecución (JVM) y a cualquier código que se ejecute en un enlace de tiempo de ejecución. Para obtener más información sobre cómo calcula Lambda la duración, consulte Supervisión de Lambda SnapStart.

Para las funciones configuradas con SnapStart, Lambda recicla periódicamente los entornos de ejecución y vuelve a ejecutar el código de inicialización. Para mejorar la resiliencia, Lambda crea instantáneas en varias zonas de disponibilidad. Se cobran cargos cada vez que Lambda vuelve a ejecutar el código de inicialización en otra zona de disponibilidad. Para obtener más información sobre cómo Lambda calcula los cargos, consulte Precios de AWS Lambda.

Comparación entre Lambda SnapStart y la simultaneidad aprovisionada

Tanto Lambda SnapStart como la simultaneidad aprovisionada pueden reducir los inicios en frío y las latencias atípicas cuando una función escala verticalmente. SnapStart lo ayuda a mejorar el rendimiento de inicio hasta 10 veces sin costo adicional. La simultaneidad aprovisionada mantiene las funciones inicializadas y listas para responder en cuestión de milisegundos de dos dígitos. La configuración de la simultaneidad aprovisionada genera cargos para su Cuenta de AWS. Utilice la simultaneidad aprovisionada si su aplicación tiene requisitos estrictos de latencia para los inicios en frío. No puede utilizar SnapStart y la simultaneidad aprovisionada en la misma versión de la función.

nota

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.

Recursos adicionales de

Además de leer los demás temas de este capítulo, también le recomendamos que pruebe el taller Inicio más rápido con AWS Lambda SnapStart y que vea la sesión Inicios en frío rápidos para sus funciones de Java de AWS re:Invent 2022.