Arquitectura de Software: Self-Contained System

Os traigo un artículo nuevo de mi blog: http://adrianalonso.es/arquitectura-del-software/self-contained-systems/

A día de hoy en el desarrollo del software todo está tendiendo a desacoplar los sistemas en microservicios. Desde que los equipos de las grandes tecnológicas como Netflix han promovido esta tendencia, todo el mundo está tendiendo a implementar esta solución en sus sistemas, pero… ¿Es siempre viable realizar una arquitectura orientada a microservicios? ¿Tenemos el equipo adecuado para manejar la gestión de esta arquitectura? Soy firme defensor de esta arquitectura, pero no nos volvamos locos, quizás no es lo que necesitamos en este momento. Es por este motivo que quiero presentaros SCS (Self-Contained Systems)

¿Que es Self-Contained System?

“Self-Contained System” es una arquitectura que se centra en la separación de funcionalidades en sistemas software independientes, lo que compone un conjunto de piezas de software que colaboran para obtener una lógica de negocio completa. Esto permite evitar el problema de mantener grandes monolitos que crecen constantemente y llegan a convertirse en algo casi inmantenible, y siendo recomendado en proyectos de media-larga envergadura.

Hasta ahora la definición podría cuadrarte perfectamente con la arquitectura de microservicios. En realidad la filosofía es la misma, ya que “Divide y Vencerás” está constantemente en la computación, sin embargo el enfoque de estas piezas de software colaborativas es algo distinto.

Diferencias con Microservicios

Como hemos visto se comparten gran cantidad de conceptos con la arquitectura de microservicios; desacoplamiento, piezas desplegables independientes, infraestructura descentralizada. Sin embargo existen algunas importantes diferencias conceptuiales que hacen que SCS sea una arquitectura totalmente independiente:

  • Un microservicio es probablemente mas pequeño que un SCS
  • Un sistema debería de tener un menor núemro de SCS que de microservicios. Por ejemplo un sistema puede componerse de 100 microservicios, sin embargo componerse de 10 SCS.
  • Los SCS idealmente no deberían de conectarse entre ellos o minímamente, contradictorio a los micrsoervicios
  • los SCSs tienen sus propio interfaz de usuario, mientras los microservicios separan la lógica del apartado visual.

De tal manera que quizás podamos dividir un SCSs en disntinto microservicios por el mismo, siendo particularmente una arquitectura de microservicios por si misma. Para mi personalmente, la división de estos sistemas se me asemeja bastante a la filosofía DDD componiendo una serie de dominios y subdominios en nuestro sistema con sus propias fronteras.

Según algunos expertos, dicen que los microservicios son mucho mas versátiles y permiten construir sistemas robustos e independientes mientras que los SCS resuelven problemas más específicos de arquitectura y organización de grandes proyectos.

Características

Entre las características principales que definen un Self-Contained System por si mismo:

  1. Cada SCS es una aplicación totalmente independiente. Para todo su dominio, todos los datos, la lógica, y el código para renderizar la interfaz es contenida por el mismo SCS. A priori debería de poder componerse por si mismo sin confiar en la disponibilidad de otros sistemas.
  2. Cada SCS es implementado y manteniendo por un solo equipo. Esto no significa necesariamente que otros desarrolladores puedan tocar el sistema, pero la responsabilidad de cada SCS debería de pertenecer a un equipo.
  3. Todas la comunicaciones con otros SCSs o a terceros debería ser asíncrona para mantener el sistema totalmente desacoplado y siendo autónomo.
  4. Un SCS puede tener debería de tener su propia API aunque tenga una misma herramienta UI de gestión.
  5. Un SCS debería de implementar una funcionalidad por si mismo, esto quiere decir que complete un caso de uso por si mismo.
  6. SCS propone desacoplar la infraestructura para potenciar la escalabilidad de cada SCS independientemente. Deberían evitarse las base de datos compartidas.

Conclusión

Como habéis visto, esta arquitectura no dista de la meta que tiene una arquitectura de microservicios. Estamos constantemente buscando la capacidad de reemplazar piezas de software de una manera sencilla, el escalado de nuestro sistema, el aislamiento y responsabilidad única de cada pieza del sistema… El objetivo es no acabar con una Big Ball of Mud ¡RECORDAD! ¡Hay que acabar con el Monolito!

Enlaces Relacionados

http://adrianalonso.es/arquitectura-del-software/self-contained-systems/

http://scs-architecture.org/

https://en.wikipedia.org/wiki/Software_architecture

https://www.innoq.com/en/articles/2016/11/self-contained-systems-different-microservices/

Full Stack Web Developer — adrianalonso.es