Diagramando la arquitectura de software en microservicios. Modelo C4

El diseño de una aplicación de software, normalmente inicia con un garabato en un papel o pizarrón en el que expresamos todo lo que queremos lograr en el producto final. Normalmente no alcanza con esto para expresar todos los detalles que queremos representar.

La siguiente imagen es típica verla en lugares donde habitan programadores.

El diseño de un software, independientemente de si se sigue un enfoque ágil o tradicional para el desarrollo del mismo pasa por definir y documentar su arquitectura, como elemento principal para transmitir al equipo lo que se desea lograr.

El modelo C4

Muchas son las vistas que pueden exponerse de una arquitectura de software, desde un simple diagrama de bloques, hasta el más mínimo detalles a nivel de código, recuerdo que en una ocasión tuve que realizar 11 documentos de arquitectura (o vistas arquitectónicas). Lo más lógico es crear lo necesario que transmita la idea.

El modelo C4 fue propuesto por Simon Brown como una solución para ayudar a los equipos de desarrollo a entender la arquitectura de un producto, se basa en el principio de ir de lo general a lo particular, haciendo zoom en cada elemento importante, el modelo propone 4 niveles de especificación.

  1. Contexto del sistema
  2. Contenedores
  3. Componentes
  4. Código.

Cada equipo o persona es libre de usar los niveles que desee, vamos a ver cada nivel en que consiste, este modelo es realmente muy útil para documentar arquitecturas basadas en microservicios.

Para explicar y entender en la práctica el modelo vamos a diagramar el ejemplo: Restaurante. No daremos más detalles porque la idea es que las vistas de la arquitectura lo expliquen en sí mismo.

Vamos a usar para hacer los diagramas la herramienta draw.io, que es libre e incluye un plugin con los estereotipos del modelo C4. 

Nivel 1: Contexto del sistema

La vista 1 es la de contexto del sistema tiene como objetivo, visualizar nuestro sistema desde un alto nivel, viendo lo que vamos a desarrollar en el centro rodeado de todos los sistemas y usuarios que interactúan con él. En este nivel los detalles no son importantes, no hay que preocuparse por protocolos ni mecanismos de comunicación. Lo importante es centrarse en las interacciones con el exterior.

El siguiente diagrama muestra el nivel de contexto para el ejemplo que cuestión.

Nivel 2: Contenedores

La vista de contenedores es un zoom, una mirada hacia adentro de lo que vamos a desarrollar, es en esencia una ampliación del sistema a desarrollar, ilustrando los elementos que lo contienen y sus interacciones. Se especifican todos los elementos a desarrollar y usados de terceros como pueden ser sistemas de bases de datos además de sus interacciones.

En el ámbito de los microservicios serás cada uno de los sistemas que exponen APIs, las bases de datos, y los elementos propios de soporte a la infraestructura como pueden ser, el servicio de configuración centralizada, descubrimiento, gateway, etc.

El siguiente gráfico muestra el diagrama de contenedores para el sistema de Restaurante que estamos modelando, no se han incluido los servicios de soporte a la infraestructura.

Nivel 3: Componentes del sistema

Similar al nivel anterior, el nivel de componentes del sistema es una vista ampliada de cada uno de los contenedores del sistema que vamos a desarrollar. No incluye un diagrama detallado de componentes de terceros que reusamos como las bases de datos, solo de los sistemas que vamos a desarrollar y se realiza un diagrama por cada componente que se desee modelar.

El siguiente diagrama es para el contenedor BackOffice API que hemos extraído del diagrama anterior y queremos explicar sus componentes internos.

Nivel 4: Código

El nivel de código es el último de los diagramas que propone el modelo C4. Este nivel se centra en tomar cada uno de los componentes y hacerle zoom hasta llevarlos a nivel de clases, objetos y sus interacciones, este modelo incluye diagramas de clases. Es un modelo que se emplea poco porque normalmente con los niveles anteriores es suficiente para transmitir el sistema que se desea construir.

En este artículo no vamos a ejemplificar este nivel del modelo.

Conclusiones

El modelo C4 es una poderosa herramienta para compartir ideas y transmitir de forma clara el sistema que se desea construir. Cada una de sus vistas está centrada en hacer una ampliación detallada de componentes de la vista anterior.

Espero te haya sido útil el artículo y comiences a usar C4 para modelar la arquitectura de tus microservicios, es una herramienta sencilla y muy útil