Blog de Amazon Web Services (AWS)
Presentando un escalamiento de sondeo más rápido para las funciones de AWS Lambda configuradas con Amazon SQS
Esta publicación fue escrita por Anton Aleksandrov, arquitecto principal de soluciones, y Tarun Rai Madan, gerente sénior de producto y traduccida al español por Diego Casas, arquitecto sénior de soluciones.
Hoy, AWS anuncia que AWS Lambda ofrece una tasa de escalamiento ascendente de sondeos hasta cinco veces más rápida para cargas de trabajo de Lambda con picos de actividad configuradas con Amazon Simple Queue Service (Amazon SQS) como fuente de eventos.
Esta función permite a los clientes crear aplicaciones basadas en eventos mediante Lambda y SQS para lograr un escalamiento con mayor capacidad de respuesta durante una ráfaga repentina de mensajes en sus colas de SQS y reduce la necesidad de duplicar las funciones Lambda o las colas de SQS para lograr un procesamiento de mensajes más rápido.
Descripción general
Los clientes que crean aplicaciones modernas de mensajería y basadas en eventos con AWS Lambda utilizan Amazon SQS como elemento fundamental para crear arquitecturas desacopladas. Amazon SQS es un servicio de cola de mensajes totalmente gestionado para microservicios, sistemas distribuidos y aplicaciones sin servidor. Cuando una función de Lambda se suscribe a una cola de SQS como fuente de eventos, Lambda sondea la cola, recupera los mensajes y envía los mensajes recuperados en lotes al controlador de funciones para su procesamiento. Para consumir los mensajes de manera eficiente, Lambda detecta el aumento de la profundidad de la cola y aumenta el número de procesos de sondeo para procesar los mensajes en cola.
Hasta la fecha, Lambda sumaba hasta 60 ejecuciones simultáneas por minuto para las funciones de Lambda suscritas a las colas de SQS, lo que aumentaba hasta un máximo de 1250 ejecuciones simultáneas en aproximadamente 20 minutos. Sin embargo, los clientes nos dicen que algunas de las aplicaciones modernas basadas en eventos que crean con Lambda y SQS son sensibles a los picos repentinos de mensajes, lo que puede provocar un retraso notable en el procesamiento de los mensajes para los usuarios finales. A fin de aprovechar la potencia de Lambda para las aplicaciones que reciben una gran cantidad de mensajes en las colas de SQS, estos clientes necesitaban que el sondeo de mensajes de Lambda se ampliara con mayor rapidez.
Con el anuncio de hoy, las funciones de Lambda que se suscriben a una cola de SQS pueden aumentarse hasta cinco veces más rápido para las colas que sufren un aumento de la acumulación de mensajes pendientes, sumando hasta 300 ejecuciones simultáneas por minuto y aumentarse hasta un máximo de 1250 ejecuciones simultáneas. Esta mejora de escalabilidad permite aprovechar la simplicidad de la integración entre Lambda y SQS para crear aplicaciones basadas en eventos que se escalan más rápido durante una oleada de mensajes entrantes, especialmente para los sistemas en tiempo real. También ofrece a los clientes la ventaja de un procesamiento más rápido durante los picos de mensajes en las colas de SQS y, al mismo tiempo, ofrece la flexibilidad necesaria para limitar el número máximo de invocaciones simultáneas de Lambda por fuente de eventos de SQS.
Controlar el número máximo de invocaciones simultáneas de Lambda por parte de SQS
Las nuevas tasas de escalamiento mejoradas se aplican automáticamente a todas las cuentas de AWS que utilizan Lambda y SQS como fuente de eventos. No hay ninguna acción explícita que deba realizar y no hay ningún costo adicional. Esta mejora de escalamiento ayuda a los clientes a crear aplicaciones Lambda de mayor rendimiento cuando necesitan una ampliación más rápida de los sondeos de SQS. Para evitar la posible sobrecarga de las dependencias descendentes, Lambda ofrece a los clientes el control necesario para establecer el número máximo de ejecuciones simultáneas a nivel de función con simultaneidad reservada y a nivel de fuente de eventos con simultaneidad máxima.
El siguiente diagrama ilustra los ajustes que puede utilizar para controlar la velocidad de flujo de una fuente de eventos de SQS. Se utiliza la simultaneidad reservada para controlar el escalamiento a nivel de función y la simultaneidad máxima para controlar el escalamiento de la fuente de eventos.
La simultaneidad reservada es la simultaneidad máxima que se desea asignar a una función. Cuando una función tiene asignada la simultaneidad reservada, ninguna otra función puede usar esa simultaneidad.
AWS recomienda utilizar la simultaneidad reservada si quiere asegurarse de que una función tiene suficiente simultaneidad para ampliarla. Cuando una fuente de eventos de SQS intenta escalar las invocaciones simultáneas de Lambda, pero la función ya ha alcanzado el umbral definido por la simultaneidad reservada, el servicio de Lambda limita las demás invocaciones de funciones.
Esto puede provocar que la fuente de eventos de SQS intente reducir su tamaño, lo que reduce el número de mensajes procesados simultáneamente. Según la configuración de la cola, los mensajes restringidos se devuelven a la cola para volver a intentarlo, caducan según la política de retención o se envían a una cola de mensajes fallidos (DLQ) o a un destino en caso de fallo.
La configuración de simultaneidad máxima permite controlar la simultaneidad en el nivel de origen del evento. Permite definir el número máximo de invocaciones simultáneas que la fuente del evento intenta enviar a la función Lambda. En los escenarios en los que una sola función tiene configuradas varias fuentes de eventos de SQS, puede definir la simultaneidad máxima para cada fuente de eventos por separado, lo que proporciona un control más detallado. Cuando intente añadir un control de velocidad a las fuentes de eventos de SQS, AWS le recomienda empezar por evaluar primero el control máximo de simultaneidad, ya que proporciona una mayor flexibilidad.
La simultaneidad reservada y la simultaneidad máxima son capacidades complementarias y se pueden usar juntas. La simultaneidad máxima puede ayudar a evitar que los sistemas intermedios se sobrecarguen y que las invocaciones se limiten. La simultaneidad reservada ayuda a garantizar la simultaneidad disponible para la función.
Escenario de ejemplo
Considere una empresa que debe procesar grandes volúmenes de documentos almacenados. Una vez por algunas horas, sus socios comerciales cargan grandes volúmenes de documentos en los depósitos de S3 de su cuenta.
Para mayor resiliencia, usted ha diseñado su aplicación para enviar un mensaje a una cola de SQS por cada uno de los documentos cargados, de forma que pueda procesarlos de forma eficiente sin saltarse ninguno accidentalmente. Los documentos se procesan mediante una función de Lambda, que tarda unos dos segundos en procesar un solo documento.
El procesamiento de estos documentos es una operación que requiere un uso intensivo de la CPU, por lo que se decide procesar un único documento por invocación. Desea utilizar la potencia de Lambda para distribuir el procesamiento en paralelo al mayor número posible de entornos de ejecución simultánea. Usted desea que la función Lambda se aumente rápidamente para procesar esos documentos en paralelo lo más rápido posible y que se reduzca a cero una vez que se hayan procesado todos los documentos para ahorrar costos.
Cuando un socio comercial carga 200 000 documentos, se envían 200 000 mensajes a la cola de SQS. La función Lambda se configura con una fuente de eventos de SQS y comienza a consumir los mensajes de la cola.
Este diagrama muestra los resultados de ejecutar el escenario de prueba antes de las mejoras en el escalamiento de la fuente de eventos de SQS. Como era de esperar, puede observar que las ejecuciones simultáneas aumentan 60 por minuto. Se necesitan aproximadamente 16 minutos para escalar gradualmente hasta 900 ejecuciones simultáneas y procesar todos los mensajes de la cola.
El siguiente diagrama muestra los resultados de ejecutar el mismo escenario de prueba después de las mejoras en el escalamiento de la fuente de eventos de SQS. El período de tiempo utilizado para ambos gráficos es el mismo, pero el rendimiento del segundo gráfico es mejor. Las ejecuciones simultáneas aumentan 300 por minuto. Solo se necesitan 4 minutos para escalar hasta 1250 ejecuciones simultáneas y todos los mensajes de la cola se procesan en aproximadamente 8 minutos.
Implementación de este ejemplo
Utilice el proyecto de ejemplo para replicar esta prueba de rendimiento en su propia cuenta de AWS. Siga las instrucciones de README.md para aprovisionar el proyecto de muestra en sus cuentas de AWS mediante el kit de desarrollo en la nube (CDK) de AWS.
Este proyecto de ejemplo está configurado para demostrar una carga de trabajo a gran escala que procesa 200 000 mensajes. La ejecución de este proyecto de ejemplo en su cuenta puede conllevar gastos. Consulte los precios de AWS Lambda y Amazon SQS.
Una vez implementada, utilice la aplicación que se encuentra en el directorio «sqs-cannon» para enviar 200 000 mensajes a la cola de SQS (o reconfigúrela a cualquier otro número). Se tardan varios minutos en rellenar la cola de SQS con mensajes. Una vez enviados todos los mensajes, active la fuente de eventos de SQS, tal y como se describe en el archivo README.md, y supervise los gráficos en el panel de CloudWatch aprovisionado.
La cuota de simultaneidad predeterminada para las nuevas cuentas de AWS es de 1000. Si no ha solicitado un aumento de esta cuota, el número de ejecuciones simultáneas se limita a este número. Usa las cuotas de servicio o ponte en contacto con el equipo de su cuenta para solicitar un aumento de la simultaneidad.
Mejores prácticas de seguridad
Utilice siempre los permisos con el menor privilegio al conceder permisos a sus funciones de Lambda para acceder a las colas de SQS. Esto reduce potencialmente la superficie de ataque al asegurar que solo funciones específicas tengan permisos para realizar acciones específicas en colas específicas. Por ejemplo, si su función solo sondea a la cola, concédale permiso para leer los mensajes, pero no para enviar mensajes nuevos. El rol de ejecución de una función define qué acciones puede realizar la función en otros recursos. Una política de acceso a la cola define los principales que pueden acceder a esta cola y las acciones que están permitidas.
Utilice el cifrado del lado del servidor (SSE) para almacenar datos confidenciales en colas SQS cifradas. Con el SSE, sus mensajes siempre se almacenan cifrados y SQS solo los descifra para enviarlos a un consumidor autorizado. SSE protege el contenido de los mensajes en las colas mediante claves de cifrado administradas por SQS (SSE-SQS) o claves administradas por el Servicio de administración de claves de AWS (SSE-KMS).
Conclusión
La capacidad mejorada de ampliación del sondeo de fuentes de eventos de Lambda SQS permite un rendimiento de escalamiento hasta cinco veces más rápido para cargas de trabajo con picos de actividad impulsados por eventos mediante colas de SQS, sin costo adicional. Esta mejora ofrece a los clientes la ventaja de procesar más rápidamente los mensajes en las colas de SQS y, al mismo tiempo, ofrece la flexibilidad necesaria para limitar el número máximo de llamadas simultáneas por parte de SQS como fuente de eventos.
Para obtener más recursos de aprendizaje sin servidor, visite Serverless Land.
Este contenido és una traduccíon del Blog Original en inglés (enlace acá).