Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
December 16, 2022 06:53 pm GMT

Probando SnapStart en funciones lambdas

SnapStart mejora el coldstart de las ejecuciones de las funciones lambdas en AWS, la documentacin de esta configuracin especifica que se puede mejorar hasta 10 veces el tiempo de inicializacin sin costo adicional y sin cambios en el cdigo de la funcin, se puede usar para mejorar el levantamiento de entornos pesados o que hacen uso de frameworks como Spring o Quarkus.

Qu es coldstart en funciones lambdas?

El coldstart o inicio en fro en funciones lambdas se refiere a la invocacin de la lambda por primera vez despus de un perodo largo sin ser llamado por ningn cliente, en este caso la funcin lambda necesita ms tiempo para levantar el entorno de ejecucin o el contendor y poder ejecutar la accin, esto puede ser no muy vistoso por los usuarios que consumen esta funcin por el tiempo que se llega a demorar.

Consideraciones para SnapStart

A la fecha de hoy existen algunas consideraciones que debe tener en cuenta al momento de configurar SnapStart en nuestras funciones lambdas.

  • Soporte para java 11
  • Soporte para arquitecturas x86_64 (no arm64)
  • No soporta la activacin de tracing para la funcin lambda

Planteamiento del problema

Para probar SnapStart funcionando se toma como referencia una funcin que se demora alrededor de 5 segundos en inicializar por primera vez, luego se implementa SnapStart y se compara resultados, se realiza pruebas de cargas relativamente pequeas para ver su comportamiento en ambos escenarios. La funcin a probar es de tipo GET reservada, pero a grandes rasgos lo que hace es consultar informacin desde una base de datos relacional, validar la informacin que entra y sale, entre algunas otras ejecuciones.

Escenario sin SnapStart

Primero se realiza un consumo directo desde la consola de Lambda para verificar tiempos de respuesta:

Image description

Vemos que el tiempo de inicializacin de la funcin es un poco ms de 5 segundos y de 1.8 segundos ejecutando el cdigo.

Prueba de carga con Jmeter

Configuracin de Jmeter para ambos casos:

Prueba de carga

Se realiza una prueba de carga usando Jmeter para poder visualizar las inicializaciones en coldstart, esto lo verificamos realizando una consulta en Logs Insights de AWS:

Image description

Se puede verificar que con la configuracin de Jmeter mostrada anteriormente se pudo generar 100 inicios en fro (cold start).

La consulta que se utiliz para ambos casos es la siguiente:

filter @type = "REPORT"  | parse @log /\d+:\/aws\/lambda\/(?<function>.*)/  | parse @message /Restore Duration: (?<restoreDuration>.*) ms/  | statscount(*) as invocations,pct(@duration+coalesce(@initDuration,0)+coalesce(restoreDuration,0), 50) as p50,pct(@duration+coalesce(@initDuration,0)+coalesce(restoreDuration,0), 90) as p90,pct(@duration+coalesce(@initDuration,0)+coalesce(restoreDuration,0), 99)as p99,pct(coalesce(@initDuration,0)+coalesce(restoreDuration,0), 50) as pi50,pct(coalesce(@initDuration,0)+coalesce(restoreDuration,0), 90) as pi90,pct(coalesce(@initDuration,0)+coalesce(restoreDuration,0), 99) as pi99group by function, (ispresent(@initDuration) or ispresent(restoreDuration)) as coldstart  | sort by coldstart desc

Escenario con SnapStart

Lo primero ser configurar SnapStart para esta funcin, para ello en configuracin general de la funcin editar la parte donde dice SnapStart:

Image description

Se debe crear una nueva versin de la lambda, y el alias que se tenga debe apuntar a la nueva versin. Al crear una nueva versin se podr notar que toma algo de tiempo, esto debido a que est preparando la imagen y almacenndola en cach para poder utilizarla cuando se se invoque por primera vez. Podremos verificar que en los logs de CloudWatch empieza a ejecutarse algunas acciones de configuraciones:

Image description

En la configuracin general de la nueva versin se debe poder observar activado el SnapStart:

Image description

De igual manera se realiza una prueba directa en la consola de lambda para verificar tiempos de respuesta.

Image description

Se observa que con SnapStart activado el tiempo de inicializacin bajo de 5 segundos a menos de un segundo, validando de esta manera la funcionalidad de SnapStart, sin embargo se aprecia que la duracin de la ejecucin del cdigo se demora un poco ms, dando como resultado la facturacin ms elevada.

Prueba de carga

De igual manera se realiza pruebas de carga para poder sacar tiempos en inicio en ColdStart obteniendo los siguientes resultados:

Image description

Con la misma configuracin de Jmeter mostrada en el primer escenario se genera 101 invocaciones en fro, se observa que los tiempos de inicializacin han mejorado notablemente a menos de un segundo, entonces SnapStart est funcionando.

Conclusiones

  • Los inicios en fro con SnapStart mejoran notablemente, segn los resultados arrojados en Logs Insights de CloudWatch, mejor 15 veces la inicializacin de la lambda, fantstico!.
  • Parecera que cuando se activa SnapStart, la duracin de ejecucin de cdigo se demora un poco ms, eso se lo puede notar claramente cuando ejecutamos la lambda directamente desde la consola.
  • SnapStart cumple con lo que dice en cuanto a tiempos de inicializacin de la lambda, personalmente veo una caracterstica muy potente que seguramente se ir mejorando con el tiempo y dando soporte a otras plataformas y versiones.

Referencias


Original Link: https://dev.to/kcatucuamba/probando-snapstart-en-funciones-lambdas-5750

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To