什么是部署图?
一个部署图是一种结构UML 图用于建模软件系统的物理执行架构。作为统一建模语言(UML)规范的核心标准之一,这种特定的UML 图类型用于展示软件组件如何被物理部署到硬件托管目标、云基础设施元素或容器运行时上。它为系统工程师、DevOps 专业人士和网络架构师提供了开发和生产区域之间服务器集群边界、数据库复制路径、负载均衡层级以及硬件网络协议的清晰布局。
使用VPasCode您无需再为复杂的矢量分组形状或手动坐标映射而困扰。通过使用简单的声明式脚本块,我们的引擎可自动对您的硬件节点结构进行分组、计算并整洁地嵌套。
核心语法指南:元素与构造
要在 PlantUML 中设计出准确且符合标准的 UML 部署图,您需要掌握硬件节点、执行环境、部署构件和网络连接。
1. 声明基础设施立方体(节点)
在部署布局中,物理计算资源以三维立方体的形式表示。您可以通过使用node关键字,或选择特定的变体,以便读者能立即获得关于硬件层级的视觉上下文:
node "裸金属应用服务器" as CoreServer
node Server1
database "数据库服务器" as DB_Node 
2. 建模云层与虚拟环境
现代应用程序很少直接部署到物理硬件上。PlantUML 提供了嵌套的分组包装器,用于表示逻辑执行边界、云服务提供商的足迹,或 Docker 和 Kubernetes 等虚拟容器运行时:
cloud— 表示外部公共 Web 层或云网络边界(例如 AWS、Azure)。frame— 表示虚拟系统或组织区域。storage— 表示物理 SAN 配置或对象存储位置。
cloud "Amazon Web Services VPC" {
node "EC2 Linux 实例" as WorkerNode
} 
3. 定义部署构件(运行在何处)
构件代表实际的物理文件(例如编译后的 JAR 文件、静态构建文件夹或压缩包),该文件将被部署到节点上。您可以通过使用 artifact 关键字,或直接将其放置在您的硬件模块内部:
node "应用服务器" {
artifact "api_v1.0.war" as API_File
} 
4. 映射网络通信链接
基础设施元素之间的连接代表具体的物理网络、线路路径或无线信道。您可以通过使用实线双破折号(--),并在引号内添加文本以明确指定所使用的网络协议(例如 HTTPS、TCP/IP、SSH):
node Server1
node DB_Node
Server1 -- DB_Node : "TCP/IP(端口 5432)" 
实用部署图的最佳实践
- 正确嵌套结构: 始终将您的内部组件或构件绘制在
node声明的花括号内,以清晰地显示执行驻留位置。 - 标记通信协议: 在服务器之间永远不要留空行。始终用其主要通信协议(例如,
"HTTPS(端口 443)")来帮助网络和安全审查。 - 隔离可用区: 在记录高可用云配置时,请使用独立的
框架包装器来展示分区域设置(例如,us-east-1a对比us-east-1b).
现实世界中的PlantUML部署图示例
示例1:经典三层Web架构(节点与协议)
此模板描述了一个标准的现代企业应用架构,映射了外部内容分发网络、应用服务器集群以及受保护的内部数据库主机层级。
@startuml
cloud "公共互联网" as net
node "Cloudflare CDN边缘" as cdn
frame "非军事区(DMZ)" {
node "Nginx负载均衡服务器" as proxy
}
frame "私有应用VPC子网" {
node "Ubuntu Server 22.04" as app_node {
artifact "core_api.jar" as application
}
}
database "托管数据库层级" {
node "PostgreSQL主集群" as db_master
}
' 建立拓扑连接线路
net -- cdn : "HTTPS"
cdn -- proxy : "HTTPS(TLS 1.3)"
proxy -- app_node : "HTTP(端口8080)"
app_node -- db_master : "TCP/IP(端口5432)"
@enduml 
语法解析: 此图清晰地定义了安全边界。编译后的资产core_api.jar 安全地嵌套在app_node 服务器框内。网络路径向内清晰扩展,为从公共Web边缘到托管数据库层级的每个部分建立了严格的协议规则。
示例2:云原生容器架构(Kubernetes与AWS Mesh)
此高级企业蓝图描绘了一个高度可扩展的多区域云部署。它利用嵌套节点布局,可视化一个负载均衡的Kubernetes容器系统与独立云数据库之间的交互。
@startuml
cloud "亚马逊网络服务(AWS)" {
node "AWS应用负载均衡器" as alb
frame "可用区:us-east-1a" {
node "EC2工作节点A" as ec2_a {
node "K8s Pod:Web前端" as pod_web_a
node "K8s Pod:订单API" as pod_api_a
}
}
frame "可用区:us-east-1b" {
node "EC2工作节点B" as ec2_b {
node "K8s Pod:Web前端" as pod_web_b
node "K8s Pod:订单API" as pod_api_b
}
}
storage "AWS Aurora无服务器集群" {
database "客户数据库" as rds_db
}
}
' 路由基础设施编排线路
alb -- pod_web_a : "HTTP轮询"
alb -- pod_web_b : "HTTP轮询"
pod_web_a -- pod_api_a : "内部gRPC"
pod_web_b -- pod_api_b : "内部gRPC"
pod_api_a -- rds_db : "SSL/TCP"
pod_api_b -- rds_db : "SSL/TCP"
@enduml 
语法解析: 通过将node 目标嵌套在子节点结构,此模板完美地模拟了容器化布局(Pod在EC2虚拟机内执行)。应用负载均衡器可无缝地将传入请求分发到各个可用区,而集群组件则将数据库调用路由回共享存储池。