Microservicios, dibujados con honestidad
Todos los diagramas de microservicios se parecen y casi ninguno responde a la única pregunta que importa: ¿se puede desplegar uno solo por separado? Dos disposiciones de los mismos cuatro servicios: una en la que sí, otra en la que no.
8 min de lecturaUML 2.5.134 de 35
La respuesta corta
- La única pregunta que un diagrama de microservicios debe responder es si alguna caja podría publicarse en su propio día.
- Sigue las flechas síncronas y cuenta los saltos. Tres o más servicios que deban estar todos arriba para una acción de usuario es un monolito distribuido.
- Dibuja las llamadas como interfaces y los eventos como señales. Así un criterio enterrado en el código se vuelve algo que un revisor puede discutir.
- Una base de datos por servicio, y fuera de este diagrama. Dónde corren es la vista de despliegue; qué guardan, el modelo propio de cada servicio.
01La pregunta que un diagrama de microservicios debe responder#
No "qué servicios hay": eso lo hace una lista, y esa lista suele estar en los nombres de los repositorios. La pregunta es: ¿puede desplegarse cualquiera de ellos por su cuenta? Todo lo que la gente espera de los microservicios - versiones independientes, escalado independiente, un equipo que puede entregar sin una reunión de coordinación - se sigue de que la respuesta sea sí, y ninguna otra propiedad del dibujo importa si es no.
Un diagrama de componentes la responde, siempre que dibujes las cosas correctas. Cada servicio desplegable es un componente; cada contrato publicado, una interfaz; cada evento, una «signal». Después tapa un servicio con la mano: si lo que queda especifica del todo su reemplazo, ese servicio puede liberarse a su propio ritmo.
02Dos tipos de flecha, a propósito#
En la figura de arriba, la pasarela depende de IOrders: un contrato síncrono, porque la pasarela no puede responder al usuario sin un pedido. Shipping y billing apuntan a OrderPlaced, una señal que el order service envía y a la que no espera.
Dibujar las dos de forma distinta es todo el valor de la imagen. Las aristas síncronas son donde la disponibilidad se compone: si el order service está caído, la pasarela devuelve un error. Las aristas de evento son donde no: que shipping esté caído retrasa un paquete y no se lleva nada más por delante. Un diagrama que dibuja ambas como flechas simples ha borrado la distinción que decide cómo falla el sistema.
03La disposición que hay que reconocer#
Esto es un monolito distribuido, y es la forma más común en producción. Nada en él es ilegal, nada está mal nombrado, y pasará la revisión porque se parece a cualquier otro diagrama de microservicios. Lo que dice, si lees las flechas en vez de las cajas, es que los cuatro servicios tienen que desplegarse juntos, probarse juntos y estar en pie juntos: así que el equipo ha asumido todos los costes de la distribución y ha conservado todas las restricciones de un monolito.
La señal se puede contar: el número de saltos síncronos en una petición. Uno está bien. Dos suele estar bien. Tres o más y la disponibilidad del conjunto es el producto de las partes, así que cuatro servicios al 99,9 % cada uno dan alrededor del 99,6 % juntos: tres horas al mes en las que nadie puede pedir nada.
Los arreglos se ven en el mismo dibujo. Deja que orders publique un evento y que pricing e inventory reaccionen a él. O fusiona dos de las cajas, que es una respuesta legítima que rara vez se propone. O cachea lo que pricing necesita, para que el salto deje de estar en la ruta de la petición. Las tres son ediciones de este diagrama, y por eso los veinte minutos de dibujarlo antes de construir valen la pena.
En una línea cada uno
- 01Un componente por servicio desplegable, una interfaz por contrato publicado, una señal por evento.
- 02Dibuja el acoplamiento síncrono y el asíncrono de forma distinta: es cómo falla el sistema.
- 03Síncrono cuando quien llama necesita la respuesta; un evento cuando no.
- 04Cuenta los saltos síncronos por petición: tres o más es un monolito distribuido.
- 05La disponibilidad se multiplica a lo largo de una cadena síncrona, y cuatro nueves se vuelven tres.
- 06Tapa cualquier servicio: lo que quede debe especificar su reemplazo, o no puede entregarse solo.
La notación está cubierta en la guía del diagrama de componentes, y cinco disposiciones más - incluido el ciclo de dos sentidos que este artículo no repite - están en los ejemplos de diagramas de componentes.
04Preguntas frecuentes#
¿Cómo se dibujan los microservicios en UML?
Como componentes, uno por servicio desplegable, con una interfaz por cada contrato publicado y una señal por cada evento. Lo que lo convierte en un diagrama de microservicios es que cada caja podría publicarse en su propio día, afirmación que las interfaces de alrededor sostienen o contradicen.
¿Cómo se detecta un monolito distribuido en un diagrama?
Sigue las flechas síncronas y cuenta los saltos de una petición. Si una sola acción de usuario cruza tres o más servicios que deben estar todos arriba, has distribuido un monolito en lugar de descomponerlo, y el diagrama te lo dijo antes que producción.
¿Los servicios deben hablar de forma síncrona o por eventos?
De forma síncrona cuando quien llama no puede seguir sin la respuesta, y por evento cuando sí puede. Dibujar ambos de forma distinta - interfaz para llamadas, señal para eventos - convierte ese criterio en algo que un revisor ve y puede discutir, en vez de una convención enterrada en el código.
¿Dónde va la base de datos en un diagrama de microservicios?
Una por servicio, y fuera de este diagrama. La vista de componentes trata de los contratos entre servicios: dibujar cinco bases añade cinco cajas que dicen lo mismo. Dónde corren es cosa del despliegue, y qué guardan, del modelo propio de cada servicio.
En esta serie
- 01¿Qué es UML?
- 02Símbolos UML
- 03Elegir un diagrama
- 04Diagramas de clases
- 05Ejemplos de diagramas de clases
- 06Cómo dibujar un diagrama de clases
- 07Símbolos del diagrama de clases
- 08Diagramas de secuencia
- 09Ejemplos de diagramas de secuencia
- 10Cómo dibujar un diagrama de secuencia
- 11Diagramas de casos de uso
- 12Ejemplos de casos de uso
- 13Diagramas de actividad
- 14Ejemplos de actividad
- 15Diagramas de máquina de estados
- 16Ejemplos de máquina de estados
- 17Diagramas de componentes
- 18Ejemplos de componentes
- 19Dibujar un diagrama de componentes
- 20Símbolos de componentes
- 21Diagramas de despliegue
- 22Ejemplos de despliegue
- 23Diagramas de objetos
- 24Diagramas de paquetes
- 25Diagramas de estructura compuesta
- 26Diagramas de comunicación
- 27Secuencia vs comunicación
- 28Diagramas de tiempos
- 29Diagramas de visión general de interacción
- 30Diagramas de perfil
- 31UML con IA
- 32Ejemplo de e-commerce
- 33Ejemplo bancario
- 34Ejemplo de microservicios
- 35Ejemplo de AWS
Lecturas relacionadas
Diagramas de estructura
Práctica del modelado
Práctica del modelado
Diagramas de estructura
Diagramas de comportamiento
Diagramas de estructura