Comparativo: la diferencia entre la Arquitectura Orientada a Servicios y los Microservicios

Escrito por Connie Vargas

arquitectura-orientada-servicios-soa-trycore-microservicios-bpm-gestion-procesos-2019-bogota-colombia

¿Te has preguntado cual es la diferencia entre la Arquitectura Orientada a Servicios (SOA) con los microservicios? Te traemos, gracias a Ima Miri, una comparación entre estas para que comprendas cual es la diferencia.

Arquitectura Orientada a Servicios:

La Arquitectura Orientada a Servicios es un estilo de arquitectura de software, el cual se encarga de proporcionar servicios a otros componentes, esta orientación es una forma de pensar en estos servicios, su construcción y resultados;  se suministran a través de un protocolo de comunicaciones en la web, que puede ser, desde un simple paso de datos o podría incluir 2 o más servicios que coordinen su conexión. Los servicios (como los servicios web RESTful) llevan a cabo algunas funciones pequeñas, como validar un pedido, activar una cuenta o proporcionar servicios de carrito de compras”.

Esta arquitectura desarrolla 2 funciones especiales, una como proveedor de servicios, y otra como consumidor de ellos. “Un agente de software puede desempeñar ambos roles”. Por un lado, la capa de consumidor es el punto donde estos interactúan con esta arquitectura, por el otro; la capa de proveedor consta de todos los servicios establecidos dentro de la SOA.

 La capa de consumidor es el punto donde los consumidores (usuarios humanos, otros servicios o terceros) interactúan con esta arquitectura y con la capa de proveedor consta de todos los servicios definidos dentro de la SOA. La siguiente figura muestra una vista rápida de una arquitectura SOA.

Es importante resaltar el Enterprise Service Bus (ESB), el cual ejerce la comunicación a través de un bus de comunicación común, consiste en una variedad de conexiones punto a punto entre proveedores y consumidores.

Arquitectura de microservicios

Los microservicios son un patrón de arquitectura de software, en el cual, las aplicaciones complejas se componen de procesos independientes pequeños que se comunican entre si mediante API que no utilizan el mismo idioma.

Estos deberán ser una necesidad real en la arquitectura de los sistemas pues se podría diseñarse de forma incorrecta; lo que significa que cada servicio, debe implementarse independiente, es permitir cerrar un servicio cuando no se requiera en el sistema y por ende, no afectar a otros.

Microservicios de Arquitectura vs. SOA

La principal diferencia entre SOA y los microservicios radica en el tamaño y el alcance. El segundo debe ser significativamente más pequeño de lo que el primero tiende a ser y, principalmente, es un servicio de implementación independiente pequeño. Por otro lado, una SOA puede ser un monolito o puede estar compuesta de múltiples microservicios.

Ambas arquitecturas cuentan con ventajas y desventajas algo similares, sin embargo, en cada una de ellas, cada servicio, al contrario de una arquitectura monolítica, tiene cierta responsabilidad.  “Por lo tanto, los servicios se pueden desarrollar en varias pilas de tecnología que llevan la diversidad tecnológica al equipo de desarrollo. El desarrollo de los servicios se puede organizar dentro de varios equipos, sin embargo, cada equipo debe conocer el mecanismo de comunicación común en SOA”.

En microservicios…

En una arquitectura de microservicios, los servicios son operables e implementados independientemente de otros servicios, al contrario de SOA. Por ello, es más fácil implementar nuevas versiones de servicios con frecuencia o escalar un servicio de forma autónoma.

En SOA, el Bus de Servicio Empresarial (ESB) podría convertirse en un punto único de falla que afectaría a toda la aplicación. Como todos los servicios se comunican a través de este Bus, si uno de estos se ralentiza, podría ocasionar que el ESB se atasque con las solicitudes de ese servicio. De esta manera, los microservicios son mucho mejores en tolerancia a fallos. Pues si hay una pérdida de memoria en alguno de ellos, solo ese se verá afectado y los demás manejarán sus solicitudes de forma corriente.

“En ambas arquitecturas, los desarrolladores deben lidiar con la complejidad de la arquitectura y un sistema distribuido. Los desarrolladores deben implementar el mecanismo de comunicación entre servicios entre microservicios o dentro de ESB y servicios”. En una arquitectura orientada a servicios, estos comparten el almacenamiento de datos, mientras que cada servicio puede tener un almacenamiento de datos independiente en microservicios.

¿Qué te parecen algunas de estas diferencias entre cada uno? ¿Cuál crees qué es más importante? ¡Déjanos saber!