Microservicios
8
min de lectura
3 de enero de 2018

Uso de la arquitectura de microservicios como estrategia de habilitación de la API

Rafael Rocha
Head de Soluciones y Preventa
Tecnólogo en Tecnología de la Información de la UNESP y postgrado en MBA Business Management de la UNIMEP.
Más sobre el autor

Contexto

Actualmente, la arquitectura de Microservicios se convirtió en un hype dentro del segmento de desarrollo software . Este modelo de arquitectura es un enfoque que determina el despliegue de las aplicaciones en una gama de servicios. El equipo de desarrollo puede adoptar las tecnologías más adecuadas para resolver problemas específicos. La arquitectura de microservicios también aumenta la escalabilidad al permitir el uso de enfoques como el autoescalado y el microcontenedor.Las APIs y los microservicios están estrechamente relacionados, ya que el estándar es utilizar una interfaz API totalmente dirigida a RESTful. Sin embargo, en la actualidad todavía nos encontramos con algunos problemas cuando necesitamos integrarnos con sistemas heredados para externalizar funcionalidades como los servicios, ya que la mayoría de los sistemas no disponen de protocolos como WebServices o interfaces RESTful; por lo tanto, vamos a explorar ese tema.

El problema y el enfoque de los microservicios

La mayoría de las empresas desean exponer APIs internamente (dentro de la corporación) y/o externamente (a socios o clientes), sin embargo, sus sistemas o aplicaciones no fueron diseñados para ese fin. La mayoría de las aplicaciones se basan en la siguiente arquitectura:

  • Aplicaciones web monolíticas que utilizan una única base de datos. Por ejemplo Java (JSF) con base de datos Oracle.
  • Producto o plataforma, como SAP ERP.
  • Aplicaciones de alto nivel escritas en Cobol
  • Aplicaciones cliente-servidor implementadas en VB6 y SQL Server.

Cuando nos enfrentamos a este tipo de escenario, la solución común es construir un adaptador para exponer un protocolo estándar. Ese componente debería parecerse al diagrama que se presenta a continuación:

El adaptador es el componente principal de la solución, ya que permitirá la externalización del servicio. Para promover esa estandarización, es necesario utilizar algunos estándares:

  • Compatibilidad total con el estándar RESTful
  • Organización por áreas de negocio
  • Ser fácilmente escalable
  • Paquetes ligeros con una rápida inicialización.

Para tener una aplicación con un modelo de integración simple y escalable es necesario tener un estilo de arquitectura que cumpla con todos esos requisitos y el estilo de arquitectura que más se asemeja a esas características es el de Microservicios.Recuerda que esta recomendación aplica cuando tu backend no está expuesto con el protocolo HTTP, ya que la mayoría de las soluciones de API Gateways lograrán enrutar y transformar fácilmente los mensajes para la comunicación con el backend.Otros escenarios en los que la arquitectura de Microservicios es muy recomendable son:

  • Orquestación: en algunos casos, se debe enrutar y/o ejecutar otros servicios dependiendo de alguna condición específica.
  • Composición: a 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 devolver un mensaje al consumidor del servicio.

Por último, ten en cuenta que los microservicios deben organizarse dentro de los dominios de tu negocio. De esta manera, podemos ver que este estilo de arquitectura es una oportunidad para romper el monolitismo de su negocio y proporcionar una mejor arquitectura, como el diseño presentado a continuación:

Arquitetura Microserviços

Este es un artículo muy interesante sobre los microservicios.

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 ligeros 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
  • Funciones de seguridad como OAuth2

Algunos de los marcos que sugerimos son: Java:

  • Spring boot
  • Marco de trabajo de Spark
  • Marco de juego
  • Dropwizard
  • Apache Camel

JavaScript:

  • js

Otra característica crucial a la hora de implementar APIs utilizando Microservicios es la capacidad de integración con sistemas heredados. Este tipo de característica requiere un framework específico que implemente los estándares de integración empresarial (patrones EAI); la recomendación en este caso es utilizar el framework Java Apache Camel.

Estrategia de implementación de microservicios

Después de implementar el paquete de Microservicios y asegurarse de que está listo, hay que implementarlo para que esté disponible para su uso. La estrategia más recomendable es utilizar servicios PaaS (Platform as a service) para implementar los paquetes de Microservicios. Esto se debe a que este tipo de servicio ofrece algunas características muy interesantes como:

  • Uso de contenedores
  • Orquestación de contenedores
  • Almacenamiento (sistema de archivos y base de datos)
  • Seguimiento en tiempo real
  • Registro y seguimiento

Otras dos características importantes son:

  • Ser capaz de escalar para apoyar el transporte
  • Ofrecer APIs para automatizar el proceso de implantación

Se deben evaluar las principales ofertas de PaaS en el mercado para una estrategia de implementación, incluyendo:

  1. Pivotal Cloud Foundry
  2. Red Hat OpenShift
  3. SalesForce Heroku

Otras opciones que se pueden considerar son Amazon Elastic Beanstalk y Google App Engine. Ambas son muy interesantes, ya que tienen una integración nativa con los servicios Cloud y de Infraestructura y además ofrecen servicios de infraestructura como servicio (IaaS).Sin embargo, en nuestra opinión, la mejor alternativa para la implementación de microservicios es la que resulta de una integración completa con una plataforma de gestión de APIs y, en este caso, la Suite API de Sensedia ofrece una funcionalidad denominada BaaS (Backend as a Service) que utiliza las mismas características del servicio PaaS y realiza esta integración.Esta característica le permite realizar la implementación y ejecutar sus microservicios, exponiendo directamente las APIs de sus sistemas heredados.Las tecnologías soportadas por BaaS son:

  • Java
  • js
  • Apache Camel

Es importante recordar que si puedes utilizar esta plataforma para ejecutar tus microservicios que no son sólo los que permiten la integración con legados, podría ser tu plataforma oficial de ejecución de microservicios.

Microservicios y plataformas API Management

Después de que los Microservicios estén funcionando correctamente, las APIs que exponen los Microservicios deben ser bien gestionadas y algunas de las características esenciales para ello, que la mayoría de las plataformas de este tipo ofrecen son:

  • Seguridad y resiliencia: necesaria para proteger su backend de personas o aplicaciones no habilitadas para consumir esas APIs. Cuando una API se abre a los socios, sus Microservicios deben estar protegidos contra los picos de transporte, para que no esté fuera de servicio y, por lo tanto, es necesario tener un control del límite de tráfico (Rate Limit y Spike Arrest) y del 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, por tanto, hay que utilizar estándares de mercado como OAuth 2.0 o JSON Web Tokens.
  • Monitoreo y seguimiento: se debe lograr monitorear todos los tipos de solicitudes realizadas en su plataforma; además, se debe contar con un poderoso mecanismo de registro para encontrar los errores que se producen en su API.

Todas las capacidades anteriores son comunes en una API Gateway solución, pero algunas otras características cruciales para la gestión completa de sus APIs son:

  • Almacenamiento en caché: debería ser capaz de evitar peticiones innecesarias en la propia API, ofreciendo una latencia mucho mejor para las propias peticiones, ahorrando incluso el coste de la infraestructura de backend.
  • Analytics: el uso de la API monitorizado en tiempo real es muy importante, tanto para controlar el consumo como para ofrecer insights sobre cómo vender, monetizar y utilizar la API de la mejor manera.

Como se ha mencionado anteriormente, algunas plataformas API Management ofrecen una integración total con la plataforma de ejecución de microservicios. Este tipo de funcionalidad ofrece una gestión total de todas las partes de la solución, no requiriendo una infraestructura separada. De este modo, su arquitectura será la que se muestra en la siguiente figura:

Arquitecturas de Microsiervos y APIs

Conclusión

El uso de la arquitectura de microservicios permite el desarrollo de interfaces RESTful que expondrán su legado que nativamente no tiene una interfaz HTTP, pero el primer reto es elegir las herramientas correctas para esa implementación. Hay muchos frameworks y lenguajes que pueden ayudar en la implementación de microservicios. La decisión depende mucho del escenario al que se enfrente, pero en este artículo se mencionan algunos de los más utilizados.Después de elegir el kit de desarrollo, la siguiente decisión que se debe tomar es determinar la plataforma de implementación y ejecución. Una vez más, la decisión depende mucho del escenario que se esté afrontando, pero, en este caso, el objetivo principal es la exposición de APIs RESTful cumpliendo de forma consistente con los requisitos funcionales y no funcionales.Sensedia API Suite es una herramienta de API management que consigue ofrecer la funcionalidad de Backend as Services (BaaS), que puede sustituir las responsabilidades de una PaaS en la implementación y ejecución de Microservicios. Además, la herramienta ofrece todas las características clave para la gestión ideal de una API, como API Gateway con Caching y Analytics. En definitiva, la recomendación es utilizar una o varias plataformas integradas que consigan permitir la gestión total de tus Microservicios y de las APIs que serán expuestas.

Referencias

1] Microservicios - http://www.martinfowler.com/articles/microservices.html
[2] Apache Camel - http://camel.apache.org/
[3] Comparador PaaS - https://paasfinder.org/compare
[4] Twelve Factor App - https://12factor.net/
[5] Plataforma Sensedia API Management - http://sensedia.com/api-management-platform/
[6] API Gateway Patrón - https://www.nginx.com/blog/building-microservices-using-an-api-gateway/

¡Gracias por leer!