Como hacer un diagrama de arquitectura con d2 y tala

D2 ahora permite crear diagramas de arquitectura con TALA localmente, guardar el código en Git y comparar tres motores sin reescribir el archivo.

¿Qué cambió en D2 v0.9.0?

TALA pasó a ser open source bajo la licencia MPL-2.0 y ahora viene incluido en D2 v0.9.0. Anteriormente, Terrastruct lo distribuía por separado como un motor propietario.

El cambio práctico es más interesante que el anuncio de la licencia: un proyecto de D2 ya puede utilizar TALA localmente sin una instalación propietaria adicional. También puedes renderizar el mismo código con TALA, Dagre o ELK y comparar los resultados directamente.

TALA fue diseñado específicamente para diagramas de arquitectura de software. En lugar de tratar cada diagrama como una jerarquía que avanza en una sola dirección, optimiza aspectos como la simetría, el espaciado, la agrupación y las conexiones ortogonales.

¿Qué son D2 y TALA?

D2 es un lenguaje declarativo para crear diagramas: describes los componentes y sus relaciones mediante texto, y D2 genera la representación visual.

TALA es uno de los motores que decide dónde aparece cada componente. D2 incluye tres opciones principales:

  • Dagre, el motor predeterminado, genera rápidamente diseños jerárquicos o por capas.
  • ELK es un motor más maduro para grafos dirigidos, con buen soporte para jerarquías complejas, puertos y grafos compuestos.
  • TALA se concentra en diagramas de arquitectura con una distribución más parecida a la que un ingeniero dibujaría en una pizarra.

Esta separación es importante. El archivo .d2 describe la arquitectura; el motor seleccionado determina su distribución visual.

¿Cómo puedes crear un diagrama de arquitectura con D2?

Empieza con una arquitectura pequeña que contenga varios grupos y dependencias compartidas:

direction: right

client: Web client

edge: Edge {
  gateway: API gateway
}

services: Services {
  auth: Authentication
  orders: Orders
}

data: Data {
  database: PostgreSQL
  cache: Redis
}

client -> edge.gateway
edge.gateway -> services.auth
edge.gateway -> services.orders
services.auth -> data.database
services.orders -> data.database
services.orders -> data.cache

Guarda el código como architecture.d2. Después de instalar D2 v0.9.0 o una versión posterior, confirma la versión instalada:

d2 version

A continuación, renderiza el mismo archivo con cada motor incluido:

d2 --layout=tala architecture.d2 architecture-tala.svg
d2 --layout=dagre architecture.d2 architecture-dagre.svg
d2 --layout=elk architecture.d2 architecture-elk.svg

SVG es el formato de salida predeterminado de D2. La CLI también puede exportar a PNG, PDF, PPTX, GIF y formatos de texto, aunque la compatibilidad puede variar según el motor y el formato.

Puedes consultar los motores disponibles con d2 layout y las opciones específicas de uno de ellos con un comando como d2 layout dagre.

¿Qué cambia al elegir otro motor de distribución?

Los componentes y las relaciones permanecen iguales, pero cambia la forma de presentar visualmente la arquitectura.

Motor Mejor punto de partida Principal ventaja Principal desventaja
TALA Arquitecturas de servicios e infraestructura Diagramas equilibrados y ortogonales con mayor control espacial Es más lento y menos estable visualmente en diagramas grandes
Dagre Flujos de solicitudes y cadenas de dependencias simples Resultado jerárquico rápido y predecible Ofrece menos flexibilidad para arquitecturas no jerárquicas
ELK Grafos dirigidos grandes y sistemas anidados Gestión madura de capas, puertos y grafos compuestos Puede producir un resultado más mecánico
Graphviz dot Flujos de trabajo existentes con DOT y grafos muy configurables Ecosistema maduro y controles de distribución extensos Requiere un archivo DOT separado en lugar del código D2
Mermaid Diagramas integrados en Markdown y plataformas de documentación Integración cómoda con documentación y soporte para distintos tipos de diagramas Menor control directo sobre la posición de una arquitectura

TALA, Dagre y ELK ofrecen la comparación más directa porque D2 puede enviar exactamente el mismo diagrama a los tres motores.

Graphviz y Mermaid forman parte de la prueba por otro motivo: son alternativas que muchos desarrolladores ya utilizan. No son motores intercambiables dentro de D2, por lo que reproducir la arquitectura requiere archivos equivalentes en DOT y Mermaid.

¿Es mejor TALA o Graphviz para diagramas de arquitectura?

TALA es un mejor punto de partida cuando la organización espacial del diagrama comunica información importante sobre la arquitectura.

Por ejemplo, TALA permite colocar un objeto cerca de otro, aplicar direcciones diferentes dentro de los contenedores y fijar algunos nodos mediante top y left mientras continúa organizando automáticamente los demás. Este control híbrido resulta útil cuando la distribución automática está cerca del resultado deseado, pero algunos componentes necesitan una posición deliberada.

Graphviz sigue siendo una opción convincente cuando ya tienes un flujo de trabajo basado en DOT o necesitas su madura colección de motores y atributos. Su motor dot funciona especialmente bien con jerarquías dirigidas: organiza los nodos por rangos, orienta las conexiones en una dirección coherente e intenta reducir los cruces y la longitud de las líneas.

Por lo tanto, la decisión no es solamente visual. También depende del lenguaje fuente, las herramientas y el grado de control que quieras mantener.

¿Cuándo conviene utilizar Dagre o ELK en lugar de TALA?

Utiliza Dagre cuando la velocidad y un flujo claro de arriba abajo o de izquierda a derecha sean más importantes que la composición arquitectónica. Es un buen punto de partida para grafos de dependencias pequeños y pipelines sencillos.

Utiliza ELK cuando el grafo sea grande, esté profundamente anidado o esté dominado por relaciones dirigidas. ELK Layered ofrece soporte para grafos compuestos, puertos, varios estilos de conexión y numerosas opciones de configuración.

Incluso el autor de TALA recomienda considerar Dagre o ELK para grafos acíclicos dirigidos y extensos. Un motor especializado en arquitectura no gana automáticamente con todos los conjuntos de datos que representan una arquitectura.

¿Dónde encaja Mermaid?

Mermaid continúa siendo una alternativa práctica cuando el diagrama debe vivir directamente dentro de un flujo de documentación basado en Markdown.

Ofrece una sintaxis específica para diagramas de arquitectura basada en grupos, servicios, conexiones y puntos de unión. Mermaid también puede utilizar Dagre o ELK con varios tipos de diagramas. Esto demuestra por qué “Mermaid frente a TALA” no es una comparación pura entre motores: Mermaid es un lenguaje y un ecosistema de renderizado, mientras que TALA es un motor utilizado por D2.

Para los equipos que ya utilizan Mermaid, una migración solo tiene sentido cuando el modelo de código de D2 o la distribución orientada a arquitecturas de TALA resuelven una limitación concreta. Nuestro análisis anterior sobre los diagramas de arquitectura de Mermaid ofrece más contexto para tomar esa decisión.

¿Cuáles son las limitaciones de TALA?

TALA presenta tres compromisos importantes.

En primer lugar, realiza varias ejecuciones con semillas diferentes y selecciona el resultado con la mejor puntuación. Una misma entrada con las mismas semillas produce un resultado determinista, pero añadir un nodo puede generar una distribución considerablemente distinta. Dagre y ELK suelen conservar mejor la estructura visual anterior.

En segundo lugar, TALA no es la mejor opción para todos los grafos direccionales extensos. Los pipelines y las cadenas largas de dependencias suelen adaptarse mejor a Dagre o ELK.

En tercer lugar, su tiempo de ejecución escala de forma no lineal. Los diagramas grandes pueden tardar más en organizarse, por lo que conviene probarlo con ejemplos representativos de producción y no juzgarlo únicamente mediante un ejemplo pequeño.

Estas limitaciones no son motivos para descartar TALA. Son razones para mantener el código del diagrama separado de la decisión sobre el motor y comparar varias opciones antes de adoptar una como estándar.

¿Deberías utilizar D2 y TALA para tus diagramas de arquitectura?

D2 con TALA merece una prueba si quieres mantener tus diagramas de arquitectura como código versionado sin entregar todo el control espacial a un motor jerárquico genérico.

El flujo de trabajo más sólido también es el más sencillo: describe la arquitectura una vez, renderízala con TALA, Dagre y ELK, y conserva el resultado que comunique el sistema con mayor claridad. Utiliza Graphviz y Mermaid como comparaciones más amplias del flujo de trabajo, especialmente si DOT o la integración con Markdown ya son importantes para tu equipo.

La apertura del código de TALA facilita considerablemente esta evaluación. Ahora puedes ejecutar localmente toda la pila de motores de D2, estudiar su comportamiento y conservar tanto el código fuente como los archivos generados dentro del mismo flujo de ingeniería.