¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
Conoce nuestra marca.¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
Conoce nuestra marca.techbiz
Teodomiro Capilla 11/07/2022 Cargando comentarios…
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:
Orientación al negocio: uno de los conceptos clave de la arquitectura de microservicios es que el servicio debe diseñarse en función de las capacidades del negocio, de modo que un servicio determinado sirva para un propósito específico del negocio y tenga un conjunto bien definido de responsabilidades. Un servicio determinado debe centrarse en hacer una sola cosa y hacerla bien. El tamaño del servicio nunca se determina en función del número de líneas de código o del número de personas que trabajan en ese servicio. Los conceptos como el Principio de responsabilidad (SRP), Event Storming, la ley de Conway, la aplicación de doce factores, el diseño dirigido por el dominio (DDD), etc., son útiles para identificar y diseñar el alcance y las funcionalidades de un microservicio.
Autonomía: desarrollar, desplegar y escalar de forma independiente. Disponer de servicios autónomos podría ser el motor más importante para la realización de la arquitectura de microservicios. Los microservicios se desarrollan, despliegan y escalan como entidades independientes. A diferencia de los servicios web o de una arquitectura de aplicación monolítica, los servicios no comparten el mismo espacio de ejecución. Más bien se despliegan como tiempos de ejecución aislados aprovechando tecnologías como los contenedores. El éxito y la creciente adaptación de los contenedores y las tecnologías de gestión de contenedores como Docker, Kubernetes, Meso … es crucial para la realización de la autonomía de los servicios y contribuyen al éxito de la arquitectura de microservicios en su conjunto.
Tolerancia a los fallos: los microservicios son más propensos a los fallos debido a la proliferación de los servicios y sus comunicaciones de red entre servicios. Una aplicación de microservicios determinada es una colección de servicios de grano fino y, por lo tanto, un fallo de uno o más de esos servicios no debería hacer caer toda la aplicación. En consecuencia, se debe manejar con eficacia el fallo dado de un microservicio para que tenga un impacto mínimo en las funcionalidades de negocio de la aplicación. El diseño de microservicios de forma tolerante a fallos requiere la adaptación de las tecnologías necesarias desde las fases de diseño, desarrollo y despliegue.
Gestión de datos descentralizada: en una arquitectura monolítica, la aplicación almacena los datos en bases de datos lógicas únicas y centralizadas para implementar varias funcionalidades/capacidades de la aplicación. En una arquitectura de microservicios las funcionalidades están dispersas en múltiples microservicios. Si se utiliza la misma base de datos centralizada, los microservicios dejarán de ser independientes entre sí (por ejemplo, si un microservicio cambia el esquema de la base de datos, eso romperá varios otros servicios). Por lo tanto, cada microservicio debe tener su propia base de datos y su propio esquema de base de datos. Cada microservicio puede tener una base de datos privada para persistir los datos que requiere la implementación de la funcionalidad de negocio que ofrece. Un microservicio dado solo puede acceder a la base de datos privada dedicada y no a las bases de datos de otros microservicios.
Gobierno de los servicios: el gobierno en los microservicios se interpreta como un proceso descentralizado, que permite a cada equipo/entidad gobernar su propio dominio como prefiera. El gobierno descentralizado es aplicable al proceso de desarrollo, despliegue y ejecución del servicio, pero hay mucho más que eso. Se pueden identificar dos aspectos clave del gobierno: el gobierno en tiempo de diseño de los servicios (selección de tecnologías, protocolos, etc.) y el gobierno en tiempo de ejecución (definiciones de servicios, registro y descubrimiento de servicios, versión de servicios…).
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.
Estos son algunos beneficios por lo que esta arquitectura ha ido creciendo en adeptos durante los últimos años:
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.
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.
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.
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.
Pero aún hay más. Este artículo forma parte de una serie en la que profundizamos en la definición de las mallas y hablamos sobre cómo nos ayudan las mallas de servicio (services mesh).
¿Tienes alguna duda? ¡Déjanos un comentario!
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.
Cuéntanos qué te parece.