Arquitectura de microservicios y arquitectura SOA
I. Arquitectura Orientada a Servicios SOA
La arquitectura orientada a servicios (SOA) es una arquitectura de software en la que diferentes componentes de una aplicación se comunican con otros componentes a través de protocolos de comunicación de red. . La comunicación puede ser una simple transferencia de datos o pueden ser dos o más servicios conectados entre sí de forma coordinada. Estos servicios únicos realizan pequeñas funciones como verificar pagos, crear cuentas de usuario o proporcionar inicio de sesión social.
La arquitectura orientada a servicios tiene menos que ver con cómo construir aplicaciones de forma modular y más con cómo componer aplicaciones mediante la integración de componentes de software distribuidos, mantenidos e implementados individualmente. Esto se logra a través de tecnologías y estándares que facilitan que los componentes se comuniquen y colaboren a través de redes, especialmente redes IP.
Hay dos roles principales en una arquitectura SOA: proveedores y consumidores. Los agentes de software desempeñan ambos roles. La capa de consumidor es el punto en el que los usuarios (individuos, aplicaciones u otros componentes de terceros) interactúan con SOA, mientras que la capa de proveedor consta de todos los servicios de la arquitectura SOA.
SOA recibió su nombre por primera vez a mediados de la década de 1990, cuando una empresa llamada Gartner Group reconoció esta nueva tendencia en arquitectura de software y la promovió en todo el mundo. De esta manera, lograron acelerar significativamente la adopción y el desarrollo de este modelo arquitectónico. Sin embargo, el primer uso documentado de servicios distribuidos como arquitectura de software se remonta a principios de los años 1980.
II.Arquitectura de microservicios
Se puede decir que la arquitectura de microservicios es el siguiente paso en el desarrollo continuo de la arquitectura SOA orientada a servicios. Básicamente, esta arquitectura es una forma especial de desarrollar software, aplicaciones web o móviles como conjuntos de servicios independientes, también conocidos como microservicios. La creación de estos servicios se limita a funciones comerciales específicas, como gestión de usuarios, roles de usuario, carritos de compras de comercio electrónico, motores de búsqueda, inicios de sesión en redes sociales, etc. Además, estos servicios son completamente independientes, lo que significa que pueden escribirse en diferentes lenguajes de programación y utilizar diferentes bases de datos. La gestión de servicios centralizada es casi inexistente y los microservicios se comunican mediante API ligeras HTTP, REST o Thrift.
El término en sí se originó en un taller de arquitectos de software cerca de Venecia en mayo de 2011. Utilizaron el término "microservicios" por primera vez para describir lo que los asistentes vieron como un estilo arquitectónico similar, y muchos exploraron las similitudes. En mayo de 2012, el mismo equipo decidió que "microservicios" era el nombre más apropiado. En mayo de 2012, el mismo equipo decidió que "microservicios" era el nombre más apropiado. Pero, de hecho, las grandes empresas tecnológicas como Microsoft, Amazon, Netflix y Facebook llevan más de una década trabajando en arquitectura de microservicios.
A primera vista, la arquitectura de microservicios parece ser lo mismo que SOA. Sin embargo, si citamos a Martin Flower, un pionero de los servicios de Microsoft, dijo una vez: "Deberíamos pensar en SOA como un superconjunto de microservicios".
Entonces, ¿cuál es la diferencia entre ellos? Se puede decir que estas dos arquitecturas son más similares que diferentes, pero son dos tipos de arquitectura diferentes. Esto se analiza con más detalle a continuación.
III.SOA vs. Microservicios
Las diferencias descritas en la siguiente tabla se explican con mayor detalle a continuación:
Desarrollo: en ambas arquitecturas, ambas pueden utilizar programación diferente lenguajes y herramientas para desarrollar servicios, aportando diversidad técnica al equipo de desarrollo. El desarrollo puede ser realizado por varios equipos, pero en SOA, cada equipo necesita comprender los mecanismos de comunicación comunes. Por otro lado, con los microservicios, los servicios se pueden ejecutar e implementar independientemente de otros servicios.
Por lo tanto, es más fácil implementar con frecuencia nuevas versiones de microservicios o escalar servicios de forma independiente. Puede leer más sobre estos beneficios de los microservicios aquí.
Límites de contexto: SOA fomenta el uso compartido de componentes, mientras que los microservicios intentan minimizar el uso compartido mediante el uso de "límites de contexto". Los límites de contexto se refieren al acoplamiento de componentes y sus datos en una sola unidad con dependencias mínimas. Debido a que SOA depende de múltiples servicios para cumplir con las solicitudes comerciales, los sistemas construidos sobre SOA pueden ser más lentos que los microservicios.
Comunicaciones: en SOA, el ESB puede ser un punto único de falla que afecta a todo el sistema. Dado que cada servicio se comunica a través del ESB, si uno de los servicios se vuelve lento, puede bloquear el ESB y solicitar ese servicio. Los microservicios, por otro lado, son mucho más tolerantes a fallos. Por ejemplo, si se produce un error de memoria en un microservicio, solo ese microservicio se verá afectado. Todos los demás microservicios seguirán gestionando las solicitudes con regularidad.
Interoperabilidad: SOA facilita el uso de múltiples protocolos heterogéneos a través de componentes de middleware de mensajes. Los microservicios intentan simplificar el modelo arquitectónico reduciendo la cantidad de opciones de integración. Por lo tanto, si desea integrar varios sistemas utilizando diferentes protocolos en un entorno heterogéneo, debe considerar SOA. Si se puede acceder a todos sus servicios a través del mismo protocolo de acceso remoto, entonces los microservicios serán una mejor opción para usted.
Escala: por último, pero no menos importante, la principal diferencia entre SOA y microservicios es la escala y el alcance. El prefijo "micro" en la arquitectura de microservicios se refiere a la granularidad de los componentes internos, lo que significa que deben ser mucho más pequeños que los servicios en la arquitectura SOA. Los componentes de servicio de los microservicios suelen tener un propósito y lo cumplen bien. Por otro lado, los servicios dentro de los servicios SOA suelen contener más funcionalidad empresarial y, a menudo, se implementan como subsistemas completos.
IV. Conclusión
No podemos decir simplemente que una arquitectura es mejor que otra. Depende principalmente de para qué esté creando su aplicación. SOA es más adecuado para entornos de aplicaciones empresariales grandes y complejos que necesitan integrarse con muchas otras aplicaciones. Es decir, las aplicaciones pequeñas no son adecuadas para la arquitectura SOA porque no requieren componentes de middleware de mensajería. Por otro lado, la arquitectura de microservicios es más adecuada para sistemas de red más pequeños y bien segmentados. Además, si está desarrollando aplicaciones web o móviles, los microservicios pueden brindarle un mayor control como desarrollador. Finalmente, podemos concluir que los microservicios y SOA son en realidad tipos diferentes de arquitectura ya que sirven para propósitos diferentes.