Ya os contamos qué son las mallas/mesh, cuáles son sus estructuras, topologías y arquitecturas que forman los sistemas y aplicaciones. Ahora, toca hablar sobre la arquitectura de microservicios y el papel de la estructura de mallas en esta arquitectura.

Este es un estilo arquitectónico distribuido que desde hace unos años se utiliza de forma primordial junto con tecnologías como Docker y Kubernetes, tanto on-premise como en cloud con servidor o sin servidor. Bien utilizado, puede ofrecer un diseño y características de las aplicaciones en cuanto a seguridad, escalabilidad, resiliencia y autonomía.

Los microservicios exponen las capacidades empresariales que se encapsulan a través de uno o más puntos endpoints, servicios. Además, se despliegan de manera independiente y se modelan en torno a un dominio empresarial. Se comunican entre sí a través de redes y, como opción de arquitectura, ofrecen muchas opciones para resolver los problemas a los que se pueden enfrentar.

Por lo tanto, una arquitectura de microservicios se basa en la colaboración de múltiples microservicios entre sí, a través de redes y diferentes protocolos de comunicación, que convierte los sistemas basados en ellos en sistemas distribuidos.

Los microservicios tiene en su ADN:

Los microservicios encapsulan el almacenamiento y la recuperación de datos, exponiéndolos a través de interfaces bien definidas. Por lo tanto, las bases de datos están ocultas dentro de los límites de los microservicios.

Los microservicios se definen por su:

¿Trade-offs en la arquitectura de microservicios?

Como muchas cosas en la vida, las elecciones tienen un trade-off donde hay que medir los beneficios y peajes que tenemos que pagar para tomar una decisión; aunque algunos de los peajes que se tienen que pagar se podrán ir paliando con las diferentes mallas: servicios, eventos y datos.

Beneficios

Estos son algunos beneficios por lo que esta arquitectura ha ido creciendo en adeptos durante los últimos años:

Peajes

La mayoría de los inconvenientes de la arquitectura de microservicios se deben principalmente a la proliferación de servicios a los que hay que hacer frente.

Comunicación y coordinación de microservicios

Determinadas funciones empresariales que son consumidas por diferentes frontends (mobile, web…) o interfaces con terceros necesitan de la cooperación entre diferentes microservicios donde la reside la lógica de negocio y se aseguran la transaccionalidad de esta.

La cooperación entre los diferentes servicios se realiza de forma síncrona (el servicio invocante se queda bloqueado hasta recibir la respuesta) o asíncrona (no existe bloqueo). Simplificando todo mucho:

Toda esta comunicación es a través de mensajes encapsulados, diferentes protocolos, TCP, UDP, HTTP, MQTT … De esta forma, se tienen dos posibles patrones arquitectónicos Service-Oriented architecture (Imperative/Functional Programming) o Event-Driven architecture (EDA) (Reactive Programming).

Estos dos patrones de arquitectura no son incompatibles. Es más, en la definición de la arquitectura de los sistemas es conveniente emplear ambos en los casos de uso, funcionales o técnicos, que se adecuen mejor.

Diferentes mallas de microservicios

Con la arquitectura basada en microservicios, es decir, la descomposición de las aplicaciones en diferentes funciones acotadas (dominnios o bounded contexts en el ámbito DDD) que trabajan juntas para lograr las funcionalidades de las aplicaciones. Los microservicios prometen ser más fáciles de codificar, probar y actualizar individualmente que las funciones integradas en aplicaciones monolíticas. Dicho esto, son difíciles de gestionar a escala empresarial porque las funciones relacionadas, que antes eran gestionadas por una aplicación que se ejecutaba en un host, ahora son gestionadas por una colección de microservicios distribuidos que se ejecutan en diversos entornos, incluyendo la nube y el borde. Esto introduce retos en áreas como la seguridad, el escalado, la red, la gestión de fallos y la orquestación de procesos.

Hay dos grandes capas de infraestructura que proporcionan capacidades que ayudan a los desarrolladores a centrarse en la lógica de negocio principal de los microservicios (en lugar de lidiar con las complicaciones de hacerlos interactuar): la malla de servicios y la malla de eventos.

Event Mesh y Service Mesh resuelven problemas que se originan en el mismo espacio de problemas, pero no responden a las mismas preguntas. Ambos patrones tienen en común que pueden volverse relevantes cuando la arquitectura de un sistema está creciendo y es necesario conectar más sistemas y servicios.

Estas capacidades son necesarias para apoyar el desarrollo de aplicaciones escalables y resilientes. Los microservicios y las arquitecturas en la nube a menudo aprovechan una malla de servicios, que es una infraestructura de red que gestiona la lógica de la red, permitiendo que el microservicio se centre en la lógica del negocio. Una malla de servicios admite el procesamiento síncrono de solicitudes y respuestas. Del mismo modo, una malla de eventos ayuda a los desarrolladores de aplicaciones a aliviar las preocupaciones sobre la ubicación de los consumidores en topologías distribuidas locales, regionales y globales para soportar casos de uso impulsados por eventos poco acoplados.

Por otra parte, se tiene otra capa funcional, la malla de datos, para el consumo de datos analíticos. Esta malla da opción a ir desmontando los supernodos de datos: Data warehouse, Data Lake, LakeHouse… con todas sus complicaciones inherentes (calidad, disponibilidad, accesibilidad) para el consumo analítico de datos. La malla de datos está compuesta de servicios que ofrecen por cada microservicio sus datos analíticos a los diferentes consumidores de estos, otros microservicios, herramientas o usuarios finales.

Conclusión

En este post hemos repasado los principales puntos de la arquitectura de microservicios y el papel de la estructura de mallas. Hemos visto los trade-offs en la arquitectura de microservicios, sus beneficios y peajes o cómo se comunican y coordinan.

En unas semanas seguiremos profundizando en el tema y hablaremos de Service Mesh, Event Mesh y Data Mesh en las nuevas arquitecturas de sistemas distribuidos como es la arquitectura de microservicios. ¿Tienes alguna duda? ¡Déjanos un comentario!

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.