Mejora del rendimiento de inicio con Lambda SnapStart
Lambda SnapStart para Java puede mejorar el rendimiento de inicio para aplicaciones sensibles a la latencia hasta 10 veces, sin costo adicional y, por lo general, sin cambios en su código de función.
El mayor contribuyente a la latencia de inicio, a menudo denominada tiempo de inicio en frío, es el tiempo que Lambda dedica a inicializar la función, lo 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 su función cuando publica una versión de función. Lambda toma una instantánea de microVM Firecracker de la memoria y el estado del disco del entorno de ejecución inicializado, cifra la instantánea y la almacena en caché para un acceso de baja latencia.
Cuando invoca la versión de la función por primera vez, Lambda reanuda los nuevos entornos de ejecución desde la instantánea almacenada en caché en lugar de inicializarlos desde cero, lo que mejora la latencia de inicio.
SnapStart es compatible con el tiempo de ejecución de Java 11. Sin embargo, no es compatible con:
- la simultaneidad aprovisionada,
- la arquitectura arm64,
- la API de Lambda Extensions,
- Amazon Elastic File System (Amazon EFS),
- AWS X-Ray o almacenamiento efímero superior a 512 MB.
Además, SnapStart solo se puede usar en versiones de funciones publicadas y alias que apuntan a versiones, y no se puede usar en la versión no publicada de una función ($LATEST).
Cuando se usa SnapStart, Lambda usa una sola instantánea como estado inicial para múltiples entornos de ejecución. Si su función utiliza alguno de los siguientes durante la fase de inicialización, es posible que deba realizar algunos cambios antes de utilizar SnapStart:
-
Unicidad
Si su código de inicialización genera contenido único que se incluye en la instantánea, es posible que el contenido no sea único cuando se reutilice en entornos de ejecución. Para mantener la unicidad, debe generar contenido único después de la inicialización.
-
Conexiones de red
El estado de las conexiones establecidas durante la fase de inicialización no está garantizado cuando Lambda reanuda su función desde una instantánea. Valide el estado de sus conexiones de red y restablezcalas según sea necesario.
-
Datos temporales
Algunas funciones descargan o inicializan datos efímeros, como credenciales temporales o marcas de tiempo en caché, durante la fase de inicialización. Actualice los datos efímeros en el controlador de funciones antes de usarlos.
En términos de precios, no hay costo adicional para SnapStart. Se le cobra en función de la cantidad de solicitudes de sus funciones, el tiempo de ejecución de su código y la memoria configurada para su función.
Los cargos por duración se aplican a:
- El código que se ejecuta en el controlador de funciones,
- el código de inicialización,
- el tiempo que se carga el tiempo de ejecución (JVM)
- y cualquier código que se ejecuta en un enlace de tiempo de ejecución.
Tanto SnapStart como la simultaneidad aprovisionada pueden reducir los tiempos de inicio en frío, pero funcionan de manera diferente.
- SnapStart se enfoca en mejorar el tiempo de inicio inicial,
- Mientras que la simultaneidad aprovisionada se enfoca en mantener una cierta cantidad de instancias preparadas para manejar las solicitudes entrantes.
Ambas opciones pueden ser beneficiosas según el caso de uso específico.
Gracias por llegar hasta aquí, si encuentras esto útil no olvides dejar un👍🏼y suscribirse para recibir más contenido.
Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre Node.js y AWS Lambda: