Para aquellos que provienen del desarrollo de software con arquitectura monolítica, el simple hecho de pensar en el desacoplamiento de la infraestructura en varios servicios se torna en una tarea compleja que debe ser llevada en varias etapas, para asegurar que se reduzca al mínimo el downtime.Lo mismo sucede al pasar de servicios a microservicios, ya que, si bien cada trozo de código está desacoplado y son independientes, el principal problema recae ahora en la administración de cada microservicio ¿Cómo se ejecutará? ¿Cómo escalará? ¿Qué pasa si una pieza de código está escrita por distintos desarrolladores y usan un lenguaje diferente?
A continuación se hablará de las problemáticas anteriormente descritas englobándolas en seis problemas al implementar microservicios y cómo se solucionan fácilmente con AWS Lambda y API Gateway.
¿Qué son AWS Lambda y API Gateway?
Antes de entrar en materia, no está demás decir que AWS Lambda es el servicio de Amazon Web Services en el que se pueden ejecutar funciones o Lambdas sin depender de instancias, es decir es un servicio del tipo Functions as a Service.
API Gateway es una interfaz por la cual distintos servicios pueden comunicarse fácilmente, gracias al control de acceso y permisos, es posible mantener comunicaciones seguras y bajo control exponiendo sólo los datos que se requieren dentro de la red.
1. Sobrecarga de flujos DevOps
Uno de los factores que más preocupa a los Project Managers es la sobrecarga operativa de flujos de DevOps en cuanto a microservicios porque, si una aplicación es compleja de desarrollar y desplegar, múltiples servicios pequeños con diferentes lenguajes y metodologías de despliegue podrían implicar sobrecarga.
Los microservicios hacen ágil el trabajo de DevOps, ya que un flujo de desarrollo convencional implica tener servicios corriendo en instancias. Esta complejidad se elimina al utilizar funciones, ya que éstas no dependen de instancias y si alguna falla o hay alta demanda, la función simplemente se replica sin necesidad de preocuparse por iniciar otra instancia.
En cuanto al manejo de distintos lenguajes o arquitecturas, es sencillo de afrontar gracias a API Gateway, cuestión que se explorará a continuación.
2. Autonomía y programación multilenguaje.
En las arquitecturas de microservicios, continuamente se sigue una administración de datos descentralizada, en la que cada equipo encargado de un servicio tiene autonomía sobre la visión de cómo se deben manejar los modelos de datos.
Lambda implementada con API Gateway son una de las mejores soluciones para proyectos de microservicios, ya que sin importar que un equipo trabaje en Python y otro con JavaScript, API Gateway se hará cargo de la comunicación.
3. Versionado simultáneo de varios servicios
Cada vez que se despliega una función en Lambda, es versionado automáticamente. Adicional a eso, se creará una etiqueta de alias ($LATEST) en los últimos cambios hechos que direcciona a la versión más reciente del código. Esto último se realiza automáticamente, sin embargo es posible etiquetar las versiones manualmente con diferentes nombres, como QA, STAGE, DEVELOPMENT; etc. Y todas estas versiones son accesibles mediante la consola de Lambda.
4. Ejecución de funciones.
Las Lambdas son invocadas en respuesta a eventos. API Gateway hace posible lanzar tus Lambdas con peticiones HTTP, pero también pueden ser invocadas de la siguientes maneras:
Lanzar Lambdas por medio de AWS API Gateway: Como se mencionó anteriormente, API Gateway permite invocar Lambdas en respuesta a peticiones HTTP.
Lanzar Lambdas con flujos de DynamoDB: Una solución de las más utlizadas es mediante el tratamiento de DynamoDB como un EventSource que lanza funciones Lambda que responden a cambios en los datos.
Otras formas de ejecución: La lista de potenciales fuentes de eventos que lancen lambdas está en crecimiento, algunas en la lista son:
- AWS IoT
- CloudWatch Logs
- DynamoDB
- Kinesis
- S3
- Evento programado
- SNS
5. Monitoreo simultáneo.
Al ser muchos pequeños componentes cada microservicio, puede ser un reto el hallar un problema subyacente porque podría no estar en el componente que falla, sino en una dependencia. Para afrontar este reto, CloudWatch es la herramienta que podemos usar para monitorear Lambdas.
Desde la consola de CloudWatch podemos ver los detalles mediante la vista de registros de nuestra aplicación, lo que hace posible identificar el origen de cualquier error en nuestras funciones sin necesidad de jugar al detective.
6. Escalabilidad
En una arquitectura de microservicios, cada componente está debidamente desacoplado, por lo que puede escalar horizontalmente y de forma independiente entre sí, y nunca se enfrenta al downtime durante el proceso de escalado, ya que en el escalado horizontal se añaden más componentes al conjunto existente en lugar de aumentar la capacidad de cada componente.
Sin complicaciones no hay excusas.
El entrar a un nuevo paradigma suele ser retador, especialmente al considerar las múltiples cosas que pueden fallar o complicarse. La solución de AWS Lambda con API Gateway, al ser un servicio totalmente administrado y cuya naturaleza se basa en el desacoplamiento, hace sencillas hasta las tareas más complejas, brindando autonomía a los equipo al liberar cargas de trabajo operativas e incluso administrativas, gracias al monitoreo, control de cambios y escalado automático.