Arquitectura sin servidor para la escalabilidad en AWS Lambda

TL;DR

  • La arquitectura sin servidor elimina la necesidad de administrar servidores, a la vez que permite que las aplicaciones se escalen automáticamente según la demanda.
  • Los servicios de AWS, como Lambda, API Gateway y Step Functions, constituyen la base para crear cargas de trabajo escalables basadas en eventos.
  • Los servicios de datos, como Amazon S3, DynamoDB y AppSync, proporcionan almacenamiento flexible y totalmente administrado, así como acceso a datos en tiempo real sin necesidad de aprovisionamiento de infraestructura.
  • Las herramientas de mensajería como SNS y Kinesis permiten una comunicación fluida entre microservicios para el procesamiento y el análisis en tiempo real.
  • Con CloudWatch y X-Ray, los desarrolladores obtienen una visibilidad completa del rendimiento y las operaciones, lo que hace que los sistemas sin servidor sean resilientes y rentables.

Las organizaciones y los desarrolladores tienen varias opciones a la hora de decidir sobre la capa de computación y cómo se desarrolla e implementa la infraestructura. Estas opciones no solo desbloquean la flexibilidad en los precios, sino que también permiten a los desarrolladores diseñar sus aplicaciones para que se escalen con el crecimiento sin necesidad de refactorizarlas.

Las plataformas en la nube ofrecen una amplia gama de servicios que le permiten diseñar una arquitectura robusta, escalable y rentable para sus aplicaciones. En este artículo, nos centraremos en la arquitectura sin servidor de AWS Lambda y su papel en el desarrollo moderno.

Hay muchas definiciones de «sin servidor» disponibles en Internet, pero para nosotros, sin servidor significa:

  • No hay servidores que aprovisionar ni administrar
  • Se escala con el uso
  • Nunca pague por el tiempo de inactividad
  • Disponibilidad y tolerancia a fallos integradas

A continuación, se indican las áreas que debe tener en cuenta al crear una carga de trabajo sin servidor. Hemos esbozado las opciones de servicio disponibles en AWS para cada una de estas áreas.

Capa de computación

La capa de computación para la arquitectura sin servidor ejecuta el algoritmo/código sin aprovisionar ningún recurso de hardware o máquina virtual. La plataforma debe proporcionar el entorno de tiempo de ejecución necesario para ejecutar el código. El código que se ejecuta en un entorno sin servidor se activa por un evento (solicitud HTTP recibida por API Gateway, archivo cargado en el almacenamiento en la nube, actualización de datos en la base de datos, etc.) y está destinado a ser de corta duración y sin estado. AWS proporciona una serie de servicios para la computación sin servidor.

Hay muchas definiciones de «sin servidor» disponibles en Internet, pero para nosotros, sin servidor significa:

  • AWS Lambda le permite ejecutar código sin aprovisionar ni administrar ningún servidor o tiempo de ejecución utilizando un modelo de precios de pago por uso. Se le cobra en función del número de solicitudes de sus funciones y la duración, el tiempo (redondeado al milisegundo más cercano) que tarda su código en ejecutarse. AWS Lambda es compatible con la mayoría de los lenguajes de programación y entornos de tiempo de ejecución populares, pero también ofrece flexibilidad y control para traer su propio entorno de tiempo de ejecución. AWS Lambda tiene integración con más de 200 servicios de AWS y hay una serie de eventos que pueden iniciar Lambda.
  • Amazon API Gateway le permite ejecutar una API REST totalmente administrada que se integra con Lambda para ejecutar su lógica de negocio e incluye gestión de tráfico, autorización y control de acceso, monitoreo y versionado de API.
  • AWS Step Functions le permite coordinar una serie de funciones de AWS Lambda en un orden específico. Puede invocar múltiples funciones Lambda secuencialmente, pasando la salida de una a otra, y/o en paralelo, y Step Functions mantendrá el estado durante las ejecuciones. Esto le permite definir un flujo de trabajo sin servidor y habilitar ejecuciones de larga duración no compatibles con los límites de ejecución de Lambda.

Capa de datos

La capa de datos proporciona un almacenamiento persistente seguro y escalable para sus aplicaciones. La capa de datos puede ser estructurada o no estructurada, e incluye bases de datos, almacenamiento de archivos/objetos y almacenamiento de clave-valor. El servicio ideal para la arquitectura sin servidor debe proporcionar un mecanismo para activarse en respuesta a un cambio de datos.

  • Amazon S3 se puede utilizar para el almacenamiento persistente de activos estáticos (paquetes de aplicaciones de una sola página (SPA)) y servirlos a los usuarios finales. Puede utilizar Amazon CloudFront con S3 para proporcionar acceso global de baja latencia y alta velocidad.
  • Amazon DynamoDB es un servicio de base de datos persistente no relacional rápido y flexible para cualquier escala. Es un servicio completamente administrado, por lo que los usuarios no tienen que preocuparse por el aprovisionamiento de hardware, la configuración, la planificación de la capacidad de rendimiento, la replicación, la aplicación de parches de software o el escalado del clúster. DynamoDB proporciona una característica llamada Streams, que es como un registro de cambios para la tabla de DynamoDB. Cada vez que se crea, actualiza o elimina un elemento, se escribe un registro en el flujo de DynamoDB. Esto abre una serie de casos de uso interesantes, incluida la activación de una función Lambda cuando se crea un evento en el flujo de DynamoDB.
  • Amazon Elasticsearch Service (Amazon ES) es un servicio Elasticsearch administrado, seguro y escalable que proporciona un motor de búsqueda y análisis. Puede utilizar este servicio para casos de uso como análisis de registros, monitoreo de aplicaciones en tiempo real y análisis de flujos de clics.
  • AWS AppSync es un servicio GraphQL administrado con capacidades en tiempo real y fuera de línea, así como controles de seguridad de nivel empresarial que simplifican el desarrollo de aplicaciones. AWS AppSync proporciona una API basada en datos y un lenguaje de programación consistente para que las aplicaciones y los dispositivos se conecten a servicios como DynamoDB, Amazon ES y Amazon S3.

Capa de mensajería

La capa de mensajería es fundamental en los sistemas nativos de la nube que implementan una arquitectura basada en microservicios con muchos servicios pequeños y aislados que se ejecutan dentro de contenedores o como funciones Lambda. Hay varias formas en que estos microservicios pueden comunicarse entre sí y es una de las decisiones clave al desarrollar aplicaciones nativas de la nube. AWS también proporciona una serie de servicios de transmisión que pueden ingerir mensajes en tiempo real para análisis y consumo por la capa de computación.
  • Amazon SNS es un servicio pub-sub altamente escalable, flexible y rentable para publicar mensajes desde una aplicación y entregarlos inmediatamente a suscriptores u otras aplicaciones. Puede entregar las notificaciones a los clientes (consumidores) utilizando un mecanismo de «push» que elimina la necesidad de verificar o «sondear» periódicamente la información y las actualizaciones nuevas.
  • Amazon Kinesis le permite recopilar, procesar y analizar datos de transmisión en tiempo real a escala. Con Amazon Kinesis Data Analytics, puede ejecutar SQL estándar o crear aplicaciones de transmisión completas utilizando SQL. Amazon Kinesis Data Firehose puede capturar, transformar y entregar datos de transmisión a Amazon S3, Amazon Redshift, Amazon Elasticsearch Service, puntos finales HTTP genéricos y servicios de terceros.

Capa de autenticación y autorización

La autenticación y autorización en aplicaciones nativas de la nube pueden adoptar diversas formas. Los usuarios pueden registrarse en el backend de la aplicación, utilizar un directorio empresarial como Active Directory, o utilizar proveedores de identidad de terceros como Facebook, Google o Amazon. Los desarrolladores deben realizar un esfuerzo considerable para crear un flujo de trabajo de autenticación y una capa de autorización óptimos que sigan las mejores prácticas.

Amazon Cognito proporciona una solución completa lista para usar para la autenticación y autorización de usuarios que funciona sin problemas con los servicios de AWS. Puede agregar fácilmente el registro de usuarios, el inicio de sesión y la sincronización de datos a las aplicaciones sin servidor. También puede habilitar otros proveedores de identidad como Google, Facebook, Oauth, SAML con los grupos de identidad de usuario de Cognito.

Capa de monitoreo

La capa de monitoreo proporciona información importante sobre la salud y el rendimiento de las aplicaciones. Permite a los desarrolladores obtener visibilidad de su aplicación en cuanto a lo que sucede durante cada ejecución y evento, ayuda a depurar el código y a ver cómo fluye la solicitud/respuesta de un microservicio a otro.

  • Amazon CloudWatch le permite acceder a las métricas del sistema en todos los servicios de AWS utilizados por la aplicación/carga de trabajo, consolidar los registros a nivel de sistema y aplicación, y crear indicadores clave de rendimiento (KPI) empresariales como métricas personalizadas para sus necesidades específicas. Proporciona paneles y alertas que pueden activar acciones automatizadas en la plataforma.
  • AWS X-Ray le permite analizar y depurar aplicaciones sin servidor al proporcionar rastreo distribuido y mapas de servicios para identificar fácilmente los cuellos de botella de rendimiento visualizando una solicitud de principio a fin.

Preguntas frecuentes (FAQ)

1. ¿Qué es la arquitectura sin servidor y por qué es esencial para la escalabilidad?

La arquitectura sin servidor es un enfoque nativo de la nube que permite a los desarrolladores ejecutar código sin aprovisionar ni administrar servidores. Es esencial para la escalabilidad porque ajusta automáticamente los recursos según la demanda, elimina la necesidad de pagar por la infraestructura inactiva y proporciona alta disponibilidad incorporada, lo que permite que las aplicaciones crezcan con la demanda del usuario sin requerir una refactorización significativa.

2. ¿Cómo encaja AWS Lambda en una arquitectura sin servidor?

AWS Lambda es el servicio de computación central para cargas de trabajo sin servidor en AWS. Permite a los desarrolladores ejecutar código en respuesta a eventos (llamadas a API, cargas de archivos, actualizaciones de bases de datos) sin administrar servidores. Utiliza un modelo de pago por uso, admite múltiples tiempos de ejecución y se integra con más de 200 servicios de AWS, lo que lo convierte en una opción ideal para construir aplicaciones escalables basadas en eventos.

3. ¿Qué servicios de AWS se utilizan para la capa de datos en aplicaciones sin servidor?

Los servicios clave para la capa de datos incluyen:

  • Amazon S3 para almacenar activos estáticos y activar eventos en cargas de archivos.
  • Amazon DynamoDB para bases de datos NoSQL totalmente administradas y altamente escalables con DynamoDB Streams para flujos de trabajo basados en eventos.
  • Amazon Elasticsearch Service para búsqueda y análisis en tiempo real.
  • AWS AppSync para construir API GraphQL con capacidades en tiempo real y fuera de línea.

Estos servicios eliminan la necesidad de aprovisionamiento manual y se escalan automáticamente para satisfacer la demanda.

4. ¿Cómo apoyan los servicios de mensajería como SNS y Kinesis a las aplicaciones sin servidor?

Amazon SNS y Amazon Kinesis forman la columna vertebral de mensajería de una arquitectura sin servidor.

  • SNS proporciona un modelo de publicación/suscripción para enviar notificaciones y mensajes a múltiples suscriptores en tiempo real.
  • Kinesis permite la ingesta y el análisis de datos en tiempo real, lo que permite a los desarrolladores construir pipelines de datos de transmisión y activar funciones Lambda para procesar eventos a escala.

5. ¿Cómo se pueden monitorear y depurar eficazmente las aplicaciones sin servidor?

AWS proporciona herramientas como Amazon CloudWatch para el registro centralizado, métricas y alertas, así como AWS X-Ray para el rastreo distribuido. Estas herramientas proporcionan a los desarrolladores visibilidad de extremo a extremo de los flujos de solicitudes, ayudan a identificar cuellos de botella de rendimiento y garantizan el funcionamiento fluido de las cargas de trabajo sin servidor, incluso a medida que escalan.

Iniciar una prueba de concepto de IA

Su migración, sin riesgos

¿Va a dejar Azure o está planeando su propia migración de IA empresarial?

Avahi lleva a las empresas desde la idea hasta la producción en AWS en cuestión de semanas, no meses, con una paridad validada y transiciones sin tiempo de inactividad. Permítanos evaluar su proyecto.