PlantUML 网络图、Archimate、Ditaa 三种架构图
PlantUML 除了标准 UML 之外还支持几种非主流但特别有用的图:网络图、Archimate 架构图、Ditaa ASCII 转矢量图。这三张图能覆盖很多不能用 UML 标准类图表达的场景。
网络图 (Network)
绘制 IT 基础设施拓扑:服务器、路由器、防火墙、交换机、负载均衡。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @startuml nwdiag { network DMZ { address = "10.0.0.0/24" router [address = "10.0.0.1"]; proxy [address = "10.0.0.2"]; web1 [address = "10.0.0.10"]; web2 [address = "10.0.0.11"]; api1 [address = "10.0.0.20"]; } network INTERNAL { address = "10.0.1.0/24" db1 [address = "10.0.1.10"]; cache1 [address = "10.0.1.20"]; queue1 [address = "10.0.1.30"]; } router -- proxy; proxy -- web1; proxy -- web2; web1 -- api1; web2 -- api1; api1 -- db1; api1 -- cache1; api1 -- queue1; } @enduml
|
要点:
nwdiag { ... } 是网络图块
network X { address = "..." } 定义子网
- 节点语法
node_name [address = "..."]
- 实线表示直接网络连接
完整语法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @startuml nwdiag {
network metro { address = "192.168.0.0/24" metro_router [address = "192.168.0.1"] web01 [address = "192.168.0.10"] web02 [address = "192.168.0.11"] db01 [address = "192.168.0.20"] }
metro_router -- web01; metro_router -- web02; web01 -- db01; web02 -- db01;
} @enduml
|
单主机分组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @startuml nwdiag { network dc1 { address = "10.0.0.0/16" router1 [address = "10.0.0.1"] rack01 [address = "10.0.0.10", title = "app-rack-01"] rack02 [address = "10.0.0.11", title = "app-rack-02"] } group application { color = "#FFE4B5" web01 [address = "10.0.0.100"]; web02 [address = "10.0.0.101"]; apiserver1 [address = "10.0.0.110"]; } router1 -- rack01 -- web01; router1 -- rack01 -- apiserver1; } @enduml
|
group 把一组节点归到一起,色彩区分。
Archimate 架构图
Archimate 是企业架构建模标准。PlantUML 的 archimate 关键字支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @startuml title 业务架构
archimate #Business "客户" archimate #Business "运营" archimate #Business "订单处理" archimate #Business "支付处理" archimate #Application "订单系统" archimate #Application "支付网关" archimate #Application "风控" archimate #Data "订单数据库"
客户 --> 订单处理 运营 --> 订单处理 订单处理 --> 支付处理
订单处理 -- 订单系统 支付处理 -- 支付网关 支付处理 -- 风控 订单系统 -- 订单数据库
@enduml
|
图层(layer):
#Business 业务层(流程、参与者、角色)
#Application 应用层(系统、服务、组件)
#Data 数据层(数据库、表、文件)
#Technology 技术层(基础设施)
#Motivation 动机层(目标、原则)
#Strategy 策略层
完整业务+应用+技术一体化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| @startuml title TOGAF 业务能力图
archimate #Business "客户管理" archimate #Business "订单管理" archimate #Business "支付管理" archimate #Business "库存管理"
archimate #Application "Web 前端" archimate #Application "API 网关" archimate #Application "订单服务" archimate #Application "支付服务" archimate #Application "库存服务"
archimate #Data "用户数据库" archimate #Data "订单数据库" archimate #Data "支付数据库"
archimate #Technology "AWS Cloud" archimate #Technology "PostgreSQL" archimate #Technology "Kafka"
客户管理 -.-> Web 前端 订单管理 -.-> API 网关 支付管理 -.-> API 网关
API 网关 -- 订单服务 API 网关 -- 支付服务 订单服务 -- 库存服务
订单服务 -- 订单数据库 支付服务 -- 支付数据库
订单数据库 -. PostgreSQL 订单数据库 -. AWS Cloud
@enduml
|
-.-> 是「realization」关系(业务被应用实现)。
Ditaa ASCII 转矢量
Ditaa 把 ASCII 字符画转成 SVG。PlantUML 支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @startditaa +---------------+ | | | Client | | | +---------------+ | v +---------------+ | | | Server | | | +---------------+ | +----------+----------+ | | | v v v +--------+ +--------+ +--------+ | Redis | | MySQL | |KafkaMQ | +--------+ +--------+ +--------+
@endditaa
|
ASCII 字符限制:
+ - | 是框线
:label: 给框加文字
- 保留
cBLU、cGRE 等颜色标签定义: :蓝色背景: cBLU
- 角标
{io}, {tr}, {di}, {ds} 控制对齐
实战:数据流图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @startditaa +--------------+ +---------------+ | Browser | HTTPS | LoadBalancer | | Client +------->+ (ALB) | +--------------+ +-------+-------+ | +--------+--------+ | | +-------v------+ +-------v------+ | Web Server | | Web Server | | (nginx) | | (nginx) | +-------+------+ +-------+------+ | | | | +--------+--------+ | +--------v--------+ | App Server | | (Go service) | +---+------+------+ | | +-----------+ +-----------+ | | +-----v------+ +------v-----+ | PostgreSQL | | Redis | | (主库) | | (缓存) | +------------+ +------------+
@endditaa
|
ASCII 画得有点丑,但好处是完全没学习曲线——编辑器支持纯文本,任何地方能编辑。
Ditaa 颜色与对齐
1 2 3 4 5 6
| +-------+ | cRED | {tr} | | | cBLU | {c} | | {tl} +-------+
|
cRED 红色背景
{tr} 右上对齐
{c} 居中
{tl} 左上对齐
网络图 vs Archimate vs Ditaa
| 场景 |
选 |
| IT 设备物理拓扑 |
network 图 |
| 企业架构 / TOGAF / 业务能力 |
Archimate 图 |
| 想要 ASCII 风格的简笔图 |
Ditaa 图 |
| 微服务架构(细到内部组件) |
组件图 / 部署图 |
| 流程 / 状态 / 时序 |
时序图 / 活动图 / 状态图 |
三种图统一 PlantUML 风格,输出 SVG 都可 diffable。
实战:企业架构全景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| @startuml title 全景架构图
' 业务层 archimate #Business "客户" archimate #Business "市场活动" archimate #Business "购物" archimate #Business "订单"
' 应用层 archimate #Application "Web 前端" archimate #Application "订单服务" archimate #Application "支付服务" archimate #Application "库存服务" archimate #Application "推荐服务"
' 数据层 archimate #Data "订单数据库" archimate #Data "用户数据库" archimate #Data "商品数据库"
' 技术层 archimate #Technology "Kubernetes" archimate #Technology "PostgreSQL" archimate #Technology "Kafka"
' 业务-业务 市场活动 -. 购物 购物 -. 订单
' 业务-应用 客户 -- Web 前端 购物 -- Web 前端 Web 前端 -. 订单服务 Web 前端 -. 推荐服务 订单服务 -. 支付服务 订单服务 -. 库存服务
' 应用-数据 订单服务 -- 订单数据库 Web 前端 -- 用户数据库 推荐服务 -- 商品数据库
' 应用-技术 订单服务 -. Kubernetes 支付服务 -. Kubernetes 订单数据库 -. PostgreSQL
@enduml
|
网络图实战:小型机房
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| @startuml nwdiag { network internet { address = "公网" user [shape = "actor"] }
network edge { address = "公网 IP 段" firewall [address = "公网 1.1.1.1"] }
network dmz { address = "10.0.0.0/24" nginx [address = "10.0.0.10"] lb [address = "10.0.0.11"] } network cluster { address = "10.0.1.0/24" pod1 [address = "10.0.1.10"] pod2 [address = "10.0.1.11"] db1 [address = "10.0.1.100"] }
user -- firewall; firewall -- nginx; nginx -- lb; lb -- pod1; lb -- pod2; pod1 -- db1; pod2 -- db1; } @enduml
|
反模式
1. 网络图只画一层
物理真实环境里至少有 CDN-防火墙-负载均衡-应用-数据库五层。一层不够清晰。
2. Archimate 把所有节点画在一张图
业务+应用+数据+技术四层叠加,密度大。建议拆 2-3 张图,每张聚焦一个层级。
3. Ditaa 当成所有图
Ditaa 简笔但功能弱,能画框和连线,但无法表达标准 UML 元素(actor / use case / 关系箭头)。复杂逻辑就上标准 PlantUML。
评审 checklist
网络图
Archimate
Ditaa