Contexto
Actualmente la arquitectura de Microservicios se convirtió en hype dentro del segmento de desarrollo de software. Ese modelo de arquitectura es un enfoque que determina el despliegue de aplicaciones en una gama de servicios. El equipo de desarrollo puede adoptar las tecnologías más adecuadas para solucionar problemas específicos. La arquitectura de Microservicios aumenta también la escalabilidad por permitir el uso de enfoques como auto-scaling y micro-container.
APIs y microservicios están muy relacionados, pues el estándar es utilizar una interfaz de APIs totalmente dirigida a RESTful. Sin embargo, actualmente todavía enfrentamos algunos problemas cuando necesitamos integrar con sistemas legados para externalizar funcionalidades como servicios, pues la mayoría de los sistemas no tienen protocolos como WebServices o interfaces RESTful, por lo tanto, vamos a explorar ese tema.
El Problema y el enfoque de Microservicios
La mayoría de las empresas desean exponer APIs de forma interna (dentro de la corporación) y/o externa (a socios o clientes), sin embargo, sus sistemas o aplicaciones no se diseñaron para ese propósito. La mayoría de las aplicaciones están basadas en la siguiente arquitectura:
- Aplicaciones monolíticas para web usando una base de datos única. Ej: Java (JSF) con base de datos Oracle.
- Producto o plataforma como, por ejemplo, ERP SAP.
- Aplicaciones de alto nivel en escritas en Cobol
- Aplicaciones Cliente-Servidor implementadas en VB6 y SQL Server.
Cuando enfrentamos ese tipo de escenario, la solución común es construir un adaptador para exposición de un protocolo estándar. Ese componente debe parecerse con el diagrama presentado a continuación:
El adaptador es el componente principal para la solución, pues permitirá la externalización del servicio. Para promover esa estandarización, deben utilizarse algunos estándares:
- Compatibilidad total con estándar RESTful
- Organización por dominios de negocio
- Ser fácilmente escalable
- Paquetes livianos y con inicialización rápida.
Para tener una aplicación con un modelo de integración sencillo y escalable es necesario tener un estilo de arquitectura que cumpla todos esos requisitos y el estilo de arquitectura que más se acerca de esas características es el de Microservicios.
Recuerde que esa recomendación se aplica cuando su backend no es expuesto con el protocolo HTTP, porque la mayoría de las soluciones de API Gateways logrará enrutar y transformar fácilmente los mensajes para comunicación con backend.
Otros escenarios en los cuales la arquitectura de Microservicios es muy recomendada son:
- Orquestación: en algunos casos es necesario enrutar y/o ejecutar otros servicios dependiendo de alguna condición específica.
- Composición: algunas veces es necesario ejecutar más de un servicio para componer y devolver una respuesta.
- Transformación de Mensajes Complejos: cuando es necesario utilizar algoritmos más complejos para lograr devolver un mensaje al consumidor del servicio.
Finalmente, fíjese que los microservicios necesitan organizarse dentro de los dominios de su negocio. De esta manera, podemos ver que ese estilo de arquitectura es una oportunidad de romper los monolíticos de su negocio y suministrar una mejor arquitectura, como el diseño presentado a continuación:
Un artículo muy interesante de Microservicios es este.
Estrategia de Implementación de Microservicios
Después de decidir que la implementación del adaptador se basará en una arquitectura de Microservicios, son necesarias algunas características:
- Paquetes livianos y bajo consumo de memoria
- La inicialización de la aplicación debe ser rápida para crear rápidamente nuevas instancias de contenedores o servidores.
- Desarrollo rápido y sencillo basado en la especificación Swagger
- Features de seguridad como OAuth2
Algunos de los frameworks que indicamos son:
Java:
- Spring boot
- Spark Framework
- Play Framework
- Dropwizard
- Apache Camel
JavaScript:
- js
Otra característica crucial cuando implementamos APIs usando Microservicios es la capacidad de integración con sistemas legados. Ese tipo de feature requiere un framework específico que implementa los estándares de integración empresarial (EAI patterns), la recomendación en ese caso es utilizar el framework Java Apache Camel.
Estrategia de Implantación de Microservicios
Después de implementar el paquete Microservicios y éste esté listo, es necesario implantarlo para que esté disponible para uso. La estrategia más recomendada es utilizar servicios PaaS (Plataforma como servicio) para implantar los paquetes de Microservicios. Eso es porque este tipo de servicio ofrece algunas features muy interesantes como:
- Uso de contenedores
- Orquestación de contenedores
- Almacenamiento (sistema de archivos y base de datos)
- Monitoreo en tiempo real
- Logging y rastreo
Otras dos características importantes son:
- Ser capaz de escalar para soportar el transporte
- Ofrecer APIs para automatizar el proceso de implantación
Deben evaluarse las principales ofertas de PaaS del mercado para una estrategia de implantación, son ellas:
- Pivotal Cloud Foundry
- Red Hat OpenShift
- SalesForce Heroku
Otras opciones que pueden considerarse son Amazon Elastic Beanstalk y Google App Engine. Las dos son muy interesantes porque cuentan con una integración nativa con los servicios de Cloud e Infraestructura y ofrecen también los servicios de infraestructura como servicio (IaaS).
Pero, en nuestra visión, la mejor alternativa para implantación de microservicios es aquella resultante de una integración completa con una plataforma de gestión APIs y, en este caso, Sensedia API Suite ofrece una funcionalidad denominada BaaS (Backend as a Service) que utiliza las mismas características de servicios PaaS y realiza esta integración.
Esa funcionalidad permite que usted realice la implantación y ejecute sus microservicios, exponiendo directamente las APIs de sus sistemas legados. Las tecnologías soportadas por BaaS son:
- Java
- js
- Apache Camel
Es importante recordar que si usted puede utilizar esta plataforma para ejecutar sus microservicios que no sean solamente los que habilitan la integración con legados, podrá ser su plataforma oficial de ejecución de microservicios.
Microservicios y Plataformas de API Management
Después que los Microservicios se están ejecutando correctamente, las APIs que exponen los Microservicios deben ser bien administradas y algunas de las features esenciales para eso, que la mayoría de las plataformas de este tipo ofrecen son:
- Seguridad y Resiliencias: necesario para proteger su backend de personas o aplicaciones no habilitadas para consumir esas APIs. Cuando una API se abre para socios, sus Microservicios deben estar protegidos contra los picos de transporte, para que no quede fuera de servicio y, para ello, es necesario tener control del límite de tráfico (Rate Limit y Spike Arrest) y límite de tamaño del cuerpo del mensaje (Payload Size).
- Control de Acceso: los consumidores de la API deben estar bajo su control y, para ello, es necesario utilizar estándares de mercado como OAuth 2.0 o JSON Web Tokens.
- Monitoreo y Rastreo: es necesario para lograr monitorear todos los tipos de solicitudes realizadas en su plataforma, además, es necesario contar con un mecanismo de log poderoso para encontrar los errores que ocurren en su API.
Todas las capacidades antedichas son comunes en una solución de API Gateway, pero algunas otras features cruciales para la gestión completa de sus APIs son:
- Caching: debe ser capaz de evitar solicitudes innecesarias en su API, ofreciendo una latencia mucho mejor para sus solicitudes, ahorrando incluso el costo de su infraestructura de backend.
- Analytics: el uso de la API monitoreada en tiempo real es muy importante, tanto para acompañar el consumo y para tener insights de cómo vender, monetizar y utilizar su API de la mejor manera.
Como antedicho, algunas Plataformas de Gestión de APIs ofrecen una integración total con la plataforma de ejecución de microservicios. Ese tipo de funcionalidad ofrece una gestión total de todas las partes de la solución, no siendo necesario una infraestructura separada. De esa manera, su arquitectura será como mostrado en la figura a continuación:
Conclusión
Utilizar arquitectura de Microservicios permite el desarrollo de interfaces RESTful que expondrán su legado que nativamente no cuenta con interfaz HTTP, pero el primer desafío es elegir las herramientas correctas para esa implementación. Existen muchos frameworks y lenguajes que pueden ayudar en la implementación de microservicios, la decisión depende mucho del escenario que se está enfrentando, pero algunas de las más utilizadas se mencionan en este artículo.
Después de elegir su kit de desarrollo, la próxima decisión que debe tomarse es determinar la plataforma de implantación y ejecución, una vez más, la decisión depende mucho del escenario que se está enfrentando, pero, en este caso, el principal objetivo es la exposición de RESTful APIs de forma consistente cumpliendo los requisitos funcionales y no funcionales.
Sensedia API Suite es una herramienta de gestión de APIs que logra ofrecer la funcionalidad de Backend as Services (BaaS) que puede sustituir las responsabilidades de un PaaS en la implantación y ejecución de los Microservicios. Además, la herramienta ofrece todas las funcionalidades clave para la gestión ideal de una API como, por ejemplo, API Gateway con Caching y Analytics.
En resumen, la recomendación es utilizar una o más plataformas integradas que logren permitir la gestión total de sus Microservicios y de las APIs que expondrán.
Referencias
[1] Microservices – http://www.martinfowler.com/articles/microservices.html
[2] Apache Camel – http://camel.apache.org/
[3] PaaS Comparator – https://paasfinder.org/compare
[4] Twelve Factor App – https://12factor.net/
[5] Sensedia API Management Platform
[6] API Gateway Pattern – https://www.nginx.com/blog/building-microservices-using-an-api-gateway/
Leave a Comment