DEV Community

Kevin Catucuamba
Kevin Catucuamba

Posted on

Concurrencia en AWS Lambda

En AWS Lambda, comprender cómo se gestiona la concurrencia es fundamental, ya que en muchos casos necesitaremos controlar el número de instancias activas en un momento específico. En este artículo, exploraremos los conceptos clave sobre la concurrencia en AWS Lambda, su importancia y cómo optimizar su comportamiento para lograr un rendimiento eficiente."

Empezemos mirando algunos conceptos de concurrencia en AWS Lambda:

Concurrencia

  • La concurrencia o simultaneidad es la cantidad de solicitudes que una función lambda pueda manejar al mismo tiempo.
  • Para cada solicitud simultánea, lambda proporciona una instancia separada de su entorno de ejecución.
  • A medida que las funciones reciben más solicitudes, Lambda se encarga automáticamente de escalar la cantidad de entornos de ejecución hasta que alcance el límite de simultaneidad de la cuenta.

Tipos de concurrencia en funciones lambdas

Concurrencia reservada: Reservar una parte de la simultaneidad de la cuenta para una función, útil cuando no se desea que otras funciones ocupen toda la simultaneidad sin reserva disponible.

Concurrencia provisionada: Preinicializar entornos para una función, útil para reducir latencias de arranque en frío.

*Como calcular la concurrencia *
La documentación recomienda tomar en cuenta lo siguiente:

  • Tomar el pico más alto como simultaneidad reservada si no se quiere descartar solicitudes o si es una función importante para el negocio.
  • Tomar el número promedio de ejecuciones simultáneas (puede perderse solicitudes).

Mirar: https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html
También podemos hacer uso de la siguiente fórmula:

Concurrency = (avg requests per second) * (avg request duration in seconds)
Calcular Concurrencia:

  • Solicitudes promedio por segundo.
  • Duración promedio de las solicitudes en segundos.

Ejemplo:

Concurrency = (100 solicitudes/segundo) * (0.5 segundos/solicitud) = 50

Cada entorno de ejecución soporta 2 ejecuciones por segundo.
Enter fullscreen mode Exit fullscreen mode

Limitantes

  • La concurrencia reservada es la cantidad máxima de instancias simultáneas que se desea asignar a una función. Cuando se dedica concurrencia reservada a una función, ninguna otra función puede usar esa concurrencia. Esto puede afectar el grupo de simultaneidad que está disponible para otras funciones.
  • Las funciones que no tienen simultaneidad reservada comparten el grupo restante de simultaneidad no reservada. Ejemplo:
Concurrencia total de la cuenta: 1000 (900 disponibles para reservar|provisionar)
F1 = 200 OK
F2 = 200 OK
F3 = 500 OK
F4 = 150 FAIL (No puede tomar esta configuración sobrepasa el limite de concurrencia de la cuenta)
Como mínimo concurrencia no reservada: 100
Enter fullscreen mode Exit fullscreen mode
  • Cada entorno de ejecución como máximo puede soportar 10 solicitudes por segundo, esto asumiendo que tiene una duración media de solicitud inferior a 100 ms, en ese caso la fórmula no funcionaria del todo bien. Ejemplo:
Solicitudes por segundo = 200 
Tiempo en segundos por solicitud = 0.05 (50 ms)

Concurrencia = (200) * (0.05) = 10

La concurrencia calculada es 10. En 10 entornos de ejecución la función lambda puede soportar 100
solicitudes por segundo de las 200 solicitudes. Experimenta un throttling.

En este caso como mínimo se necesitaria 20 entornos de ejecución reservada.
Enter fullscreen mode Exit fullscreen mode
  • Cada función Lambda deberían ir ajustándose a nuevos recursos desplegados: Lambdas o concurrencia de cuenta.
  • Reservar una mala simultaneidad reservada puede provocar limitaciones y malas experiencias al usuario.
  • La simultaneidad reservada es útil para funciones que se invocan de forma asíncrona o mediante sondeadores internos. (por ejemplo, integraciones de S3, SQS o DynamoDB)

Cierre

Ahora que ya conoces los puntos claves de concurrencia en AWS Lambda ya podrás configurar más sabiamente a tus funciones lambdas para que puedan estar optimizadas cuando existen grandes ráfagas de peticiones o si solo quieres controlar el autoescalamiento.

Gran parte de este artículo está basada en la documentación oficial. Puedes revisar en este link que tiene más ejemplos acerca de concurrencia en funciones lambdas: https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html

Top comments (0)