¿Qué son los Microservices?
December 14, 2022
Para ser claros, no existe una arquitectura única que sirva para todo; tampoco existe una mejor o peor arquitectura, solo la más adecuada para tu negocio.
Introducción a los Microservicios
La arquitectura de microservicios es una arquitectura de software flexible y escalable que tiene como objetivo facilitar el desarrollo, despliegue y mantenimiento de grandes sistemas de software.
La idea fundamental detrás de los microservicios es dividir un gran sistema de software en múltiples servicios relativamente independientes, donde cada servicio se enfoca en una única funcionalidad.
Los servicios en una arquitectura de microservicios suelen ser procesos que se comunican a través de una red para cumplir un objetivo utilizando protocolos independientes de la tecnología, como HTTP o gRPC, lo que permite que diferentes servicios se combinen según sea necesario para satisfacer diversas necesidades comerciales.
Evolución de la Arquitectura de Software
Comencemos utilizando la arquitectura monolítica como una arquitectura inicial. Veamos qué problemas se encuentran con diferentes arquitecturas a medida que el negocio crece con el tiempo.
Arquitectura Monolítica
La arquitectura monolítica está diseñada para ser autónoma, donde los componentes o funciones de la aplicación están estrechamente acoplados en lugar de estar débilmente acoplados, como en las aplicaciones modulares. Hay muchos beneficios al usar la arquitectura monolítica, por lo que muchas aplicaciones aún se crean utilizando este paradigma de desarrollo.
Descripción general del despliegue de una aplicación monolítica típica. Este diseño sin duda hace que el despliegue sea más simple, pero las actualizaciones continuas son desafiantes, lo que podría ser desastroso si falla un módulo.
Por ejemplo, las aplicaciones monolíticas podrían tener un mejor rendimiento en términos de rendimiento que las modulares. Dado que cada componente y el código relacionado deben estar presentes para que la aplicación se ejecute o compile, las aplicaciones monolíticas pueden ser más fáciles de probar y depurar.
Las aplicaciones monolíticas han tenido éxito en el pasado. Sin embargo, en la era de la nube, cada vez más personas se sienten frustradas con la arquitectura monolítica a medida que más aplicaciones monolíticas se despliegan en entornos basados en la nube. Los ciclos de cambio están vinculados: un cambio realizado en una pequeña parte de la aplicación requiere que todo el monolito se reconstruya y se despliegue.
Los desarrolladores deben recompilar toda la base de código y reinstalar toda la aplicación monolítica después de cada actualización, no solo la parte alterada. Esto hace que los despliegues continuos o rutinarios sean desafiantes, lo que a su vez reduce la agilidad de la aplicación y del equipo.
Puede ser difícil mantener una aplicación monolítica modular en una buena estructura con el tiempo, lo que dificulta mantener modificaciones que deberían afectar solo a un módulo interno. Escalar requiere escalar toda la aplicación en lugar de solo las partes que necesitan más recursos.
Arquitectura Orientada a Servicios
La arquitectura orientada a servicios (SOA) es una arquitectura de software que se refiere a una aplicación compuesta por agentes de software discretos y débilmente acoplados que realizan una función requerida, definiendo una forma de usar interfaces de servicio para hacer que los componentes de software sean reutilizables. Estas interfaces utilizan protocolos de comunicación generalizados, por lo que pueden agregarse rápidamente a nuevas aplicaciones sin requerir una integración significativa.
Descripción general de un despliegue típico de SOA. El impacto de una falla en un solo servicio se reduce efectivamente con tal arquitectura y la tasa de iteración de un solo servicio aumenta.
Tal arquitectura está mejor equipada para manejar la expansión del equipo, permitiendo que cada equipo se concentre en el servicio específico en sí. Libera al equipo de la carga pesada del pasado, para que puedan concentrarse en una tarea y hacerla correctamente.
Los siguientes beneficios de SOA frente a la arquitectura monolítica:
- Mejor mantenibilidad: cada servicio es una entidad independiente, lo que hace que las actualizaciones continuas y su mantenimiento sean simples y sin riesgos para otros servicios.
- Mayor confiabilidad: grandes bloques de código, como los utilizados en la arquitectura monolítica, son más difíciles de depurar y probar que los servicios. En consecuencia, los productos basados en SOA se vuelven más confiables.
- Desarrollo paralelo: una arquitectura orientada a servicios fomenta el paralelismo en el proceso de desarrollo ya que tiene capas. Es posible crear y completar servicios independientes simultáneamente.
Arquitectura de Microservicios
La arquitectura de microservicios es una forma de SOA que se enfoca en construir una serie de componentes autónomos que conforman una aplicación. A diferencia de las aplicaciones monolíticas construidas como un todo indivisible, las aplicaciones de microservicios consisten en múltiples componentes independientes que se unen con APIs.
El alcance de la arquitectura es la distinción clave entre SOA y microservicios. En contraste con una arquitectura de microservicios, que se basa en servicios discretos que pueden operar independientemente, un modelo SOA permite que los servicios o módulos se compartan y reutilicen en toda la organización. En otras palabras, mientras que los microservicios se centran en aplicaciones, SOA tiene un alcance empresarial.
Otras diferencias se resumen en la siguiente tabla:
SOA | Microservicios | |
---|---|---|
Arquitectura | Los servicios se reutilizan y comparten a nivel empresarial | Los servicios están desacoplados y operan independientemente |
Granularidad | Servicios modulares relativamente grandes | Servicios más pequeños y flexibles que sirven a un propósito o función específica para el negocio |
Comunicación | ESB | API |
Acoplamiento | Compartir recursos/acoplamiento débil | Contexto delimitado |
Interoperabilidad | Admite múltiples protocolos de mensajes como Simple Object Access Protocol (SOAP), Advanced Messaging Queuing Protocol (AMQP) y Microsoft Messaging Queuing (MMQ) | Utiliza protocolos de mensajería livianos e independientes del lenguaje, como HTTP, Representational State Transfers (REST) o Java Messaging Service (JMS) |
Gobernanza de datos | Gobernanza de datos común en toda la empresa como resultado del intercambio de componentes | No hay una gobernanza de datos consistente entre los equipos debido a la naturaleza independiente de los servicios |
Almacenamiento | Capa única de almacenamiento de datos compartida por todos los servicios dentro de una aplicación dada | Servidor de datos o base de datos independiente para el almacenamiento de datos para cada servicio, según sea necesario |
Descripción general del despliegue típico de un microservicio
Estrategias de escalado para arquitectura monolítica y arquitectura de microservicios
Para leer más en detalle https://martinfowler.com/articles/microservices.html
En comparación con la arquitectura monolítica, la arquitectura de microservicios también es más flexible para metodologías de desarrollo iterativo y métodos ágiles. Debido a la interacción débil entre los diversos componentes, también son más escalables y capaces de ser probados por separado. Además, los módulos tienen sus propias bases de datos, se comunican entre sí y aceleran el inicio del programa.
Por qué se necesitan los Microservicios
Utilizar microservicios puede aumentar significativamente la eficacia del ciclo de entrega de desarrollo y aumentar la agilidad del proceso. La combinación de DevOps y microservicios acelera la entrega de cambios y nuevas características. Los microservicios pueden construirse más rápido que el típico proyecto de desarrollo de software a gran escala que involucra una aplicación monolítica. Es más fácil y rápido gestionar cambios.
El cambio en los microservicios será más fluido y suave que en los monolíticos. No hay cascadas en el proceso de desarrollo de microservicios, como ocurre con una aplicación monolítica. Cada microservicio es independiente y puede desarrollarse con cualquier lenguaje de programación o construcción.
Los fallos en los microservicios también son menos graves que los fallos en sistemas más grandes. El fallo de una aplicación monolítica en un área suele tener un impacto negativo significativo en todo el sistema. En un diseño de microservicios, los problemas pueden resolverse más rápida y fácilmente. Lo reconoces, lo aíslas y lo compensas. Si tu arquitectura utiliza microservicios, puedes escalar los microservicios para superar una barrera de rendimiento. La cascada operativa de una aplicación monolítica puede evitarse creando rápidamente una nueva versión de los microservicios defectuosos.
Los Beneficios de los Microservicios
Los beneficios de los microservicios sobre las arquitecturas tradicionales incluyen los siguientes.
- Modularidad: Un gran sistema de software se divide en varios servicios relativamente independientes, cada uno de los cuales es responsable de cumplir una función específica. Esto permite que diferentes servicios se combinen según sea necesario para satisfacer diferentes necesidades comerciales.
- Escalabilidad: Una ventaja importante de la arquitectura de microservicios es la escalabilidad. Debido a que cada servicio es relativamente independiente, es posible escalar dinámicamente cada servicio según las necesidades reales. Esto permite afrontar mejor las fluctuaciones en el tráfico comercial.
- Despliegue: La arquitectura de microservicios permite que cada servicio se despliegue de manera independiente y flexible. Esto permite desplegar nuevas características más rápidamente y permite iteraciones rápidas sin afectar el sistema en general.
- Fácil de expandir: La arquitectura de microservicios dota a cada servicio de responsabilidades y funciones únicas. Bajo tal arquitectura, los microservicios son más fáciles de actualizar y reconfigurar que los módulos en la arquitectura de software tradicional, y el radio de explosión de un fallo en un solo servicio es manejable.
- Fácil de mantener: La arquitectura de microservicios hace que cada servicio sea más pequeño y responsable de realizar solo funciones específicas. Esto facilita el mantenimiento y permite reparar fallos más rápidamente.
- Heterogeneidad técnica: La arquitectura de microservicios hace que cada servicio ya no esté restringido a una pila tecnológica específica. La interacción de datos entre servicios puede realizarse a través de interfaces estandarizadas, y se puede utilizar la pila tecnológica más adecuada para el escenario de servicio actual para desarrollar el servicio y lograr la solución óptima.
Resumen
Las arquitecturas de software han evolucionado para hacer frente a los requisitos cambiantes, a menudo integrando nuevas preocupaciones. La arquitectura de microservicios se está volviendo gradualmente popular en la era de la nube nativa. Para construir una mejor arquitectura de microservicios, visita APISIX, el mejor API gateway, y API7.ai para obtener más soporte comercial.