Arquitectura web: SOA vs. Microservices, aplicaciones y diferencias

Cuando navegamos por una página web, utilizamos una aplicación móvil o realizamos alguna acción en un programa informático, todo parece sencillo en la palma de nuestra mano o en la pantalla del ordenador. Sin embargo, estos desarrollos llevan casi tanta arquitectura detrás como un edificio de Norman Foster o Frank Gehry. No una arquitectura de cimientos y contrafuertes, pero sí de lenguajes de programación y desarrollos que tratan de construir arquitecturas software robustas y perdurables.

Durante los últimos años, en el mundo de las tecnologías de la información y la comunicación hemos escuchado mucho hablar sobre el término Microservices. Está atrayendo la atención de muchas miradas y genera acalorados debates entre los equipos de los departamentos de IT sobre la idoneidad de utilizar esta arquitectura o la arquitectura SOA. Por este motivo, en este artículo vamos a explicar a qué nos referimos cuando hablamos de SOA y Microservices, y nos adentraremos en sus diferencias y aplicaciones para entender mejor en qué consisten.

Existe mucha confusión sobre aspectos como: ¿los Microservices son servicios SOA bien diseñados o son algo más? ¿Qué son los Microservices? ¿Si ya trabajo con una solución SOA debo cambiar a Microservices? Vamos a intentar poner luz a estas cuestiones y establecer las diferencias entre estos dos tipos de arquitecturas IT.

¿Qué es SOA?

SOA (Service Oriented Architecture) o la arquitectura orientada a servicios es una arquitectura de software en base a la que los distintos componentes de la aplicación se relacionan entre sí, y proporcionan servicios al resto de componentes mediante un protocolo de comunicaciones en red. SOA puede coordinar o poner en comunicación dos o más servicios. Las aplicaciones basadas en SOA emplean componentes acoplados libremente que utilizan un protocolo de mensajería de Enterprise Services Bus para comunicarse entre sí.

SOA es un modelo arquitectónico para sistemas distribuidos que persigue los siguientes objetivos: mejorar la agilidad organizacional, implementar la orientación de servicios y alinear los objetivos de negocio y los objetivos del departamento de TI.

SOA desarrolla una aplicación integrando los componentes de software distribuidos y desplegándolos por separado, a diferencia de Microservices que “modulariza” y paquetiza los componentes de cada aplicación. SOA opera en base a tecnologías y estándares que facilitan la cooperación y la comunicación fluida entre componentes. Utilizar SOA puede ser adecuado cuando no es posible descentralizar los repositorios de datos.

Un poco de historia:aunque SOA surgió en los años ochenta del pasado siglo, momento en el que existen los primeros registros de su utilización, no fue hasta mediados de la década de los noventa cuando se popularizó en todo el mundo de la mano de la empresa Gartner Group, que adoptó esta tendencia en arquitecturas de software y aceleró el crecimiento de este patrón de arquitectura de software.

 

Características y aplicaciones de SOA:

  • Maximiza la reutilización de los servicios de la aplicación.
  • En SOA el movimiento DevOps aún no es la corriente más popular. Si quieres saber más sobre DevOps consulta el artículo del blog de Bilib “¿Qué es DevOps y cómo influye en la transformación digital de las empresas”.
  • Se enfoca en la reutilización de funcionalidades empresariales.
  • Utiliza Enterprise Service Bus (ESB) para establecer las comunicaciones.
  • Es capaz de soportar múltiples protocolos de mensajes.
  • Utiliza una plataforma común para la totalidad de servicios desplegados en la aplicación.
  • No está generalizado el uso de contenedores.
  • Todos los servicios SOA comparten el almacenamiento de datos.

¿Qué es Microservices?

Por su parte, Microservices (microservicios) entiende el desarrollo de una aplicación como la implementación de un conjunto de pequeños servicios. Cada uno de estos pequeños servicios trabajan al mismo tiempo, se ejecutan en su propio proceso y se mantienen en constante comunicación entre sí, utilizando mecanismos más ligeros respecto a SOA.

Podríamos decir que los Microservices se representan, en cierta forma, como un paso más allá de SOA, por tanto, pueden entenderse como una evolución de la arquitectura orientada a servicios. Con Microservices podemos desarrollar e implementar aplicaciones de software, aplicaciones web o móviles en base a una arquitectura que se basa en conjuntos de servicios independientes. De hecho, los Microservices pueden ser calificados como tal porque cada servicio se empaqueta y se despliega de forma totalmente independiente. Están diseñados como servicios altamente autónomos que no dependen de una comunicación sincronizada y centralizada.

Los microservicios se ejecutan de forma independiente y cumplen una única función específica como pueden ser: administrar a los diferentes usuarios de una web; permitir que el carrito de compra en un comercio online funcione, así como el motor de búsqueda o la función de iniciar sesión en una red social asociada al desarrollo, entre muchas otras.  

Al ser servicios que se desarrollan de forma totalmente independiente, pueden ser escritos en lenguajes de programación diferentes, así como utilizar distintas bases de datos. Los microservicios utilizan API de HTTP, REST o Thrift para comunicarse entre sí y la administración del sistema está prácticamente descentralizada en su totalidad. Estos microservicios están soportados por una maquinaria totalmente automatizada y se construyen con independencia de despliegue.

Los Microservices son aptos para ser utilizados por empresas de diferentes tamaños, ya que hablamos de soluciones escalables. Cada uno de estos Microservicios poseen una firma asociada limitada de un módulo lo que permite, como adelantábamos, que diferentes servicios puedan ser escritos en distintos lenguajes de programación, así como ser administrados por equipos de trabajo diferentes.

Un poco de historia:pero, ¿de donde proviene el término de Microservicios? La palabra se acuñó en un taller de arquitectos de software celebrado en 2011 en Venecia. Se empleó por primera vez para identificar un estilo de arquitectura de software que los asistentes al taller habían venido explorando y utilizando recientemente. Pero, aunque el término se acuñase en 2011, gigantes tecnológicos como Microsoft o Amazon ya venían utilizando los microservicios, también denominados “SOA de grano fino”, antes de que este término se generalizase.

Características y aplicaciones de Microservices:

  • Trabajan de forma autónoma e independiente.
  • No es necesario que participen en transacciones distribuidas.
  • Presentan un alcance limitado.
  • No dependen de la sincronía con otros servicios.
  • No han sido creados para formar parte de composiciones complejas de servicios.
  • Se gobiernan de forma descentralizada y pueden emplear lenguajes de programación diferentes.
  • Utilizan almacenamiento de datos propios.
  • Actúan con mecanismos de comunicación basados en mensajes.
  • La arquitectura Microservices está vinculada al movimiento y filosofía DevOps.
  • Emplea sistemas de mensajería menos elaborados y simples respecto a SOA.
  • Emplea protocolos ligeros como HTTP, REST o API de Thrift.
  • Cada microservicio puede tener un almacenamiento de datos independiente.
  • Promueve la colaboración de equipos.

Diferencias entre SOA y Microservices

Ambas arquitecturas presentan más similitudes que diferencias. De hecho, Martin Fowler, ingeniero de software y pionero en el mundo de los microservicios, asegura que deberíamos pensar en SOA como un súper-conjunto de microservicios. Por tanto, podríamos decir que ambas arquitecturas se complementan y pueden entenderse como una evolución.

No hay una arquitectura mejor que otra, la elección depende del objetivo y propósito del proyecto a desarrollar. En términos generales, SOA suele ser más recomendable para organizaciones más grandes que trabajan en base a la integración de aplicaciones. Los Microservices se caracterizan por ser sistemas más pequeños y fraccionados que permiten un mayor control al desarrollador de software.

Una diferenciación importante entre ambas arquitecturas es el tamaño y alcance de cada una de ellas. En el sistema de microservicios, cada servicio presenta una única funcionalidad que ejecuta a la perfección. Por su parte, SOA incluye más funcionalidades y es capaz de desarrollar sistemas completos.

Con Microservices los desarrolladores tienen más flexibilidad al no depender del sistema global; con SOA los equipos están más “encorsetados” ya que deben conocer el mecanismo de comunicación común para todos los servicios, lo que no ocurre con Microservices.

Con Microservices cada uno de los servicios pueden ser implementados de forma independiente, al contrario de lo que ocurre con SOA que trabaja en base a la integración de servicios.

En cuanto a los fallos en el sistema, si se producen en SOA afectarían a todo el sistema, al contrario que con Microservices, arquitectura con la que el fallo afectaría a un único punto y no a la totalidad del sistema.

Por último, si nos fijamos en la operatividad, SOA utiliza múltiples protocolos heterogéneos por lo que permite integrar en una misma aplicación varios sistemas que emplean diferentes protocolos. Microservices simplifica el patrón de arquitectura y reduce el número de opciones de integración.

En definitiva, ambas arquitecturas se emplean en la actualidad y otorgan buenos resultados, la elección entre una u otra depende del proyecto que queramos desarrollar.