que es un cold start

¿Qué es el Cold Start en AWS Lambda?

¿Qué es Cold Start?

Hola muy Buenas, Bienvenidos a Aprende Web Dev

En este articulo vamos a tratar el tema del Cold Start de AWS Lambda. Vamos a comentar lo que es y como podemos minimizarlo para que nuestras funciones funcionen mejor.

En este articulo vamos a comentar el cold start de AWS Lambda, pero este concepto existe en todas las plataformas de cloud. Algunos ejemplos son Google Cloud Functions, Azure functions….

Si usas AWS Lambda para desplegar tus aplicaciones, sabes que AWS Lambda es un servicio de tipo serverless. En este tipo de servicios tu subes el codigo y el provedor de cloud maneja todo desde el despliegue de la aplicacion hasta el escalado, en caso que tengas mucho trafico.

Entonces con este modelo, solo tienes que preocuparte de crear tu aplicación y NADA MÁS!

Además de esto, solo pagas por el tiempo ejecucion de tu funcion lambda.

Como ves este tipo de servicios tienen muchas ventajas, pero tambien cuentan con algunas desventajas. Una de ellas es el Cold Start.

En Lambda estas funciones corren en un contenedor. Si tu función esta corriendo, entonces el contenedor va a estar activo y preparado para recibir nuevas ejecuciones. En esta situación podemos definir a tu función como una función activa.

Si nadie llama a tu función, entonces después de un tiempo de inactividad(~10min) el contenedor se va enfriar(cold) y tu función pasara a ser inactiva. En este caso tu proveedor de cloud va a eliminar ese contenedor.

Entonces cuando alguien llama a una funcion Inactiva, el proveedor de cloud tendra que provisionar una maquina, crear el contenedor y ejecutar tu codigo. Esto traera un poco de latencia a la hora de responder. En los peores casos tu función puede llegar a tardar hasta 5 segundos en responder.

Entonces podemos definir a cold start como el delay que se produce cuando se llama a una función inactiva. Cuando las funciones estan calientes(warm), no veras este delay, ya que AWS reusara el mismo contenedor para las ejecuciones.

Un factor que puede incrementar el tiempo del cold start, es el peso de tu codigo(dependencias incluidas). Cuando mayor sea el peso, mas le va a costar a AWS copiar tu codigo en el nuevo contenedor y correrlo.

¿Cómo Evitarlo?

Existen diferentes formas para tener tus funciones calientes. Una de ellas es llamar a tu función lambda cada cierto tiempo para que el contenedor nunca muera y tus funciones sigan activas siempre.

Estos ejemplos son del Serverless Framework, pero existen otros frameworks que implementan esta técnica de forma similar.

En el serverless framework tenemos que instalar el plugin de serverless-cold-start. Este plugin va a estar llamando a nuestra función cada cierto tiempo, para que se mantenga caliente.

npm install serverless-plugin-warmup --save-dev

Declaramos el plugin en el serverless.yml

plugins:
  - serverless-plugin-warmup

functions:
  hello:
    warmup: true

En las funciones lambdas tambien tenemos que crear un poco de logica.

module.exports.lambdaToWarm = function(event, context, callback) {
  /** Immediate response for Warmup plugin */
  if (event.source === 'serverless-plugin-warmup') {
    console.log('WarmUP - Lambda is warm!')
    return callback(null, 'Lambda is warm!')
  }

  ...more logic
}

Conclusión

En este articulo hemos visto lo que es el Cold Start y también hemos comentado técnicas para minimizar el cold start. Podemos minimizar el impacto del cold start usando plugins en el framework de Serverless.

Este blog es parte de un proyecto mas grande, en el que ayudamos a la gente a entender conceptos de la programación y también enseñamos a programar. Si estas interesado en el proyecto te dejo aqui el canal de Youtube, en el que subimos videos sobre tecnologia, programación y mucho más!!

Acerca del autor

Zeshan Choudhary

Zeshan es un apasionado de las tecnologías modernas y le gusta experimentar con cosas nuevas. Actualmente esta trabajando de lo que le gusta, Desarrollo Backend.

Ver todos los artículos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *