La computación sin servidor ha revolucionado la forma de crear y desplegar aplicaciones en la nube. Ofrece escalabilidad, reducción de la gestión de la infraestructura y rentabilidad.

Amazon Web Services (AWS) ofrece varias opciones para la computación sin servidor y la orquestación de estos recursos. Esto incluye pero no se limita a las funciones de AWS Step para manejar potencialmente alguna lógica y orquestar AWS Lambda, AWS Fargate para administrar ECS o EKS responsable de orquestar contenedores, y AWS Batch para orquestar trabajos por lotes. Ten en cuenta que no cubriremos AWS Batch en este artículo.

Recuerda que si tu deseas aprender acerca de AWS puedes ir al siguiente video

AWS Lambda con AWS Step Functions


AWS Lambda

Es un servicio informático sin servidor que le permite ejecutar código sin aprovisionar ni administrar servidores. Se basa en eventos y se escala automáticamente en función de las solicitudes entrantes.

Las funciones de Lambda pueden integrarse bien con varios servicios de AWS, proporcionando una forma potente de coordinar flujos de trabajo.

AWS Step Functions

Es un servicio de flujo de trabajo sin servidor que le permite coordinar varias funciones de Lambda y otros servicios para crear flujos de trabajo complejos y conscientes del estado.

Esto significa que cada AWS Step Function actúa como un orquestador con una base de datos distribuida integrada responsable de realizar un seguimiento del estado de cada flujo de trabajo. Además, puede utilizar AWS Step Functions Workflow Studio para diseñar y visualizar sus flujos de trabajo. Esto facilita enormemente la comprensión y administración de orquestaciones complejas.

Ventajas:

✅ Pague sólo por el tiempo de computación que consuma.
✅ Fácil de desplegar, supervisar y gestionar.
✅ Autoescalable y de alta disponibilidad
✅ Fácil de integrar con otros servicios de AWS
✅ Alto nivel de abstracción reforzado
✅ Barato para flujos de trabajo y entornos de desarrollo impredecibles
✅ Solo necesita asegurar su aplicación.

Desventajas:

⚠️ ¡Alto nivel de dependencia del proveedor! (tanto Lambda como Step Functions)
⚠️ ¡Terminarás "construyendo tu propio framework"!
(el uso de frameworks comunes es demasiado caro para las funciones lambda)
⚠️ Duración máxima de ejecución limitada
⚠️ Opciones limitadas de CPU/memoria
⚠️ Necesita monitorización y optimización constante de la utilización de recursos
⚠️ Ejecuciones concurrentes máximas limitadas
⚠️ Acoplamiento flexible frente a mantenimiento de la coherencia entre servicios
(cuando los servicios se ven obligados a ser muy pequeños)
⚠️ Tiempos de respuesta más elevados debido al arranque en frío y otros gastos generales
(los flujos de trabajo SF Express podrían ayudar un poco)
⚠️ Caro para flujos de trabajo de producción predecibles
⚠️ Adecuado sólo para cálculos pequeños y de corta duración
⚠️ Las funciones pequeñas implican demasiadas comunicaciones lentas a través de la red
⚠️ Al utilizar Step Functions, se paga por transición de estado
⚠️ Las Funciones por Pasos estándar pueden mantener el estado hasta un año
(¿y si se cambia la lógica?)
Actualización: Ahora las versiones y los alias pueden ayudarle a superar esto.

AWS ECS con Fargate


AWS Elastic Container Service (ECS) con Fargate es un servicio de orquestación de contenedores totalmente administrado que le permite ejecutar contenedores sin operar la infraestructura subyacente. Fargate elimina la necesidad de aprovisionar y administrar instancias EC2, proporcionando una experiencia simplificada para implementar y escalar aplicaciones en contenedores.

Ventajas:

✅ Muy bajo vendor lock-in al adoptar Containers.
✅ Muy rentable
✅ Fácil de desplegar, supervisar y gestionar
✅ Autoescalable y de alta disponibilidad
✅ Adecuado para cálculos pequeños, grandes, de corta duración y de larga duración
✅ Puede utilizar fácilmente cualquier sistema operativo, marco de trabajo o lenguaje de programación


Desventajas:

⚠️ Opciones de configuración de utilización de recursos limitadas
⚠️ Un poco de dependencia del proveedor, no apto para soluciones multicloud
⚠️ Necesita monitorización y optimización de la utilización de recursos
⚠️ Es necesario saber cómo asegurar los contenedores.

AWS EKS con Fargate


AWS Elastic Kubernetes Service (EKS) con Fargate es un servicio Kubernetes totalmente administrado que ejecuta contenedores sin operar la infraestructura subyacente. EKS proporciona una plataforma escalable y de alta disponibilidad para implementar aplicaciones en contenedores con Kubernetes, mientras que Fargate elimina la necesidad de aprovisionar y administrar instancias EC2.

Ventajas:

✅ La compatibilidad con Kubernetes ofrece la ventaja de utilizar herramientas nativas de la nube
✅ Alto nivel de flexibilidad y personalización.
✅ Autoescalable y de alta disponibilidad
✅ Sin dependencia del proveedor, adecuado para soluciones multicloud
✅ Adecuado para cómputos pequeños, grandes, de corta duración y de larga duración
✅ Se puede utilizar fácilmente cualquier sistema operativo, framework o lenguaje de programación

Desventajas:

⚠️ Cuota mínima sólo para ejecutar un clúster
⚠️ Demasiado complejo para equipos pequeños, startups y pymes
⚠️ Necesita monitorización y optimización constante de la utilización de recursos
⚠️ Es necesario saber cómo asegurar los contenedores


Al elegir entre AWS Lambda con/sin Step Functions y otras opciones sin servidor, por ejemplo, orquestadores de contenedores como AWS ECS administrado por Fargate o AWS EKS administrado por Fargate, es esencial considerar los requisitos específicos de su aplicación y las ventajas y desventajas asociadas con cada opción.

Lambda y Step Functions

Ofrecen simplicidad para flujos de trabajo pequeños, pero pueden volverse bastante complejos para aplicaciones grandes o llevar a la trampa de "construir sus marcos".

Además, al adoptar una arquitectura basada en eventos, puedes conseguir escalabilidad rápidamente pero recuerda que la complejidad nunca muere y, la mayoría de las veces, se traslada a otra capa y crece allí.

Ten en cuenta que las funciones lambda sólo son adecuadas para cálculos pequeños y de corta duración, lo que puede dar lugar a demasiadas comunicaciones a través de la red, que es uno de los componentes más lentos.

Por otro lado, ECS con Fargate o EKS con Fargate pueden ofrecer más opciones de personalización, compatibilidad con las cargas de trabajo en contenedores existentes y la capacidad de gestionar tareas de larga duración.

Comprender las ventajas y los inconvenientes de cada solución le ayudará a tomar una decisión informada basada en los requisitos de su aplicación y la experiencia de su equipo.

Recuerda, no hay "una respuesta para todo", por supuesto, ¡excepto 42 😃! Es decir, si crees que lambda debería usarse para todo, una solución distribuida state-aware como Step Functions (especialmente la estándar), que está pensada para ser duradera, debería usarse en gran medida en cada flujo de trabajo de un entorno basado en arquitectura de microservicios, o incluso si crees que tu elección de infraestructura debería obligar a los diferentes equipos de tu organización a usar un único lenguaje de programación, probablemente deberías replantearte tus decisiones arquitectónicas.

Si te ha gustado el artículo, puedes motivarme a escribir otros similares compartiéndolo con tus colegas y siguiéndome aquí.

Fuente

Plataforma de cursos gratis sobre programación