Arquitectura de Software: Self-Contained System

¿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.

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.

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/

--

--

Full Stack Web Developer — adrianalonso.es

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store