PlantUML 网络图、Archimate、Ditaa 三种架构图

puml.online

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: 给框加文字
  • 保留 cBLUcGRE 等颜色标签定义: :蓝色背景: 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

网络图

  • 标了子网地址和节点 IP?
  • 拓扑层次清晰?边缘-防火墙-应用-数据?
  • 节点命名一致?

Archimate

  • 用了正确的 layer?
  • 业务层最少?
  • 应用层最多节点数 < 20?

Ditaa

  • ASCII 框线对齐?
  • 颜色不滥用?
  • 节点 ≤ 12 个?
  • 标题: PlantUML 网络图、Archimate、Ditaa 三种架构图
  • 作者: puml.online
  • 创建于 : 2026-07-29 15:55:00
  • 更新于 : 2026-08-14 21:34:29
  • 链接: https://puml.online/blog/plantuml-network-archimate-ditaa/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。