UML部署图完全指南:从入门到画好一张专业的系统部署架构图

UML包含很多种UML部署图、UML设计、UML在线设计。UML 是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。

UML部署图完全指南

部署图(Deployment Diagram)是UML中唯一面向物理架构的图,回答一个核心问题:软件部署在什么硬件上,它们之间如何通信。本文从核心概念到绘制方法,完整拆解部署图的每一步。


一、什么是部署图

部署图描述系统运行时的物理架构——哪些软件组件部署在哪些硬件节点上,节点之间通过什么方式通信。

它和组件图的区别在于:组件图画的是逻辑层面"模块怎么组合",部署图画的是物理层面"软件放在哪台机器上"。一个管设计,一个管落地。

典型使用场景:

  • 系统上线前确认部署方案
  • 运维团队理解系统拓扑结构
  • 新人入职快速掌握系统全貌
  • 故障排查时定位节点间的通信链路

二、六大核心要素

要素 符号 含义 示例
节点(Node) 三维方框 物理或虚拟的计算资源 应用服务器、数据库服务器
制品(Artifact) 圆柱形或矩形+«artifact» 可部署的软件单元 user-service.jar、web-app.war
组件(Component) 矩形+«component» 功能单元 用户服务组件、支付组件
通信路径 实线 节点间的物理或逻辑连接 网络连接、API调用
依赖关系 虚线箭头 一个元素依赖另一个才能运行 应用依赖数据库
部署规范 矩形附在路径上 部署的配置参数 协议=HTTPS, 端口=443

节点的两种类型

设备(Device): 有形的物理硬件。

  • 标记:«device»
  • 示例:物理服务器、手机、IoT传感器、负载均衡器

执行环境(Execution Environment): 软件容器,为制品提供运行环境。

  • 标记:«executionEnvironment»
  • 示例:JVM、Docker容器、Node.js运行时、应用服务器

两者可以嵌套:一个«device»里面可以包含多个«executionEnvironment»,每个执行环境里再部署具体的制品。


三、节点间通信关系

通信路径(Association)

用实线连接两个节点,表示它们之间存在物理或逻辑上的通信链路。

可以在路径上标注协议类型:

[Web Server] ——HTTP/HTTPS—— [Application Server]
[App Server]  ——TCP/IP—— [Database Server]
[Mobile App] ——REST API—— [API Gateway]

依赖关系(Dependency)

用虚线箭头表示一个节点或组件依赖另一个才能正常工作。

[Order Service] - - -> [Payment Service]
(订单服务依赖支付服务的接口)

关联与部署

制品放在节点内部,表示"部署在"该节点上。如果需要明确部署方式,用«deploy»标注。


四、五步绘制法

第一步:确定系统范围

画部署图最忌讳的是"什么都画"。先回答三个问题:

  1. 这张图给谁看?(运维 / 架构评审 / 新人)
  2. 覆盖哪些子系统?(全量 / 某个微服务集群)
  3. 粒度到什么程度?(服务器级别 / 容器级别 / 进程级别)

给运维看,粒度到容器和端口;给新人看,粒度到服务器和服务名即可。

第二步:列出所有节点

按从外到内的顺序梳理:

示例(电商系统):

  1. 用户设备:浏览器、App
  2. CDN节点
  3. 负载均衡器
  4. Web服务器(Nginx)
  5. 应用服务器(Spring Boot × 3)
  6. 数据库服务器(MySQL主从)
  7. 缓存服务器(Redis)
  8. 消息队列(RabbitMQ)
  9. 文件存储(OSS)

第三步:确定节点层级与嵌套

物理设备包含执行环境,执行环境包含制品:

«device» 应用服务器
  └── «executionEnvironment» JVM
       └── «artifact» user-service.jar
       └── «artifact» order-service.jar

如果用容器化部署,结构调整为:

«device» 物理服务器
  └── «executionEnvironment» Docker
       └── «artifact» user-service容器
       └── «artifact» order-service容器
       └── «artifact» nginx容器

第四步:连接通信路径

用实线连接有通信关系的节点,并标注协议:

  • 浏览器 → CDN:HTTPS
  • CDN → Nginx:HTTP
  • Nginx → 应用服务:HTTP(内网)
  • 应用服务 → MySQL:JDBC
  • 应用服务 → Redis:Redis Protocol

用虚线箭头标注依赖关系:

  • 订单服务 - - -> 支付服务
  • 用户服务 - - -> 缓存服务

第五步:审查与精简

部署图完成后,逐项检查:

  • 每个节点的构造型标注是否清晰(«device» / «executionEnvironment»)
  • 通信路径上的协议是否标注
  • 制品是否正确放在所属节点内
  • 是否存在孤立节点(没有连接任何路径)
  • 图的复杂度是否匹配目标读者

精简原则: 如果一张图超过15个节点,考虑拆分为多张子图。先画总览图,再分模块画详细图。


五、五个常见错误

错误1:把部署图画成了架构图

部署图的核心是"物理部署",不是"逻辑设计"。如果图里全是组件间的调用关系,没有节点和硬件,那画的是组件图不是部署图。

判断标准: 图里有没有三维方框(节点)?没有就不是部署图。

错误2:节点层级混乱

设备、执行环境和制品的嵌套关系必须清晰。常见错误是把制品直接放在设备上,跳过了执行环境层。

正确做法: 设备 → 执行环境 → 制品,三层嵌套。

错误3:通信路径不标协议

画一条实线连接两个节点,但不标注协议类型。运维拿到图后不知道端口怎么开、防火墙怎么配。

规范: 每条通信路径至少标注协议(HTTP/HTTPS/TCP/JDBC等),有条件的话加上端口号。

错误4:粒度不一致

有些节点画到服务器级别,有些画到容器级别,有些画到进程级别。读者不知道该按哪个粒度理解。

规范: 一张图保持统一粒度。如果需要多粒度,用多张图分层展示。

错误5:忽略网络分区

生产环境通常分DMZ区、内网区、数据库区,不同区域之间的网络策略不同。部署图不体现网络分区,运维就无法判断哪些连接需要经过防火墙。

规范: 用分组框或不同颜色区分网络区域,标注跨区域连接的防火墙策略。


六、部署图与其他UML图的配合

部署图很少孤立使用,通常与其他UML图组合形成完整的系统文档:

配合图 作用 组合效果
组件图 描述逻辑组件 从设计到部署的完整链路
时序图 描述跨节点调用流程 理解节点间如何协作
用例图 描述用户场景 确认每个用例由哪些节点支撑
活动图 描述业务流程 定位流程涉及哪些部署节点

推荐组合: 部署图 + 时序图。部署图回答"部署在哪",时序图回答"怎么调用",两张图组合就是完整的运行时文档。


七、工具选择

工具 定位 部署图支持 适合谁
singcheng.com 一站式在线画图 支持UML节点、组件、制品符号,模板库可复用 团队协作、快速出图
Draw.io 免费在线画图 内置UML部署图模板,符号齐全 个人快速绘制
Lucidchart 在线协作画图 UML形状库完整,支持实时协作 团队协作
PlantUML 代码生成图表 用文本描述生成部署图,版本可控 偏好代码的开发者
StarUML 桌面建模工具 支持完整UML 2.5规范 专业建模

如果需要快速画一张部署图用于评审或文档,singcheng.com 提供了现成的UML部署图模板,拖拽即可完成,省去从零搭建符号库的时间。更多画图教程和模板,尽在 singcheng.com。


八、自检清单

绘制完成后,逐项核对:

  • 图的标题是否明确(系统名称 + "部署图" + 版本号)
  • 每个节点是否标注构造型(«device» / «executionEnvironment»)
  • 设备和执行环境的嵌套关系是否正确
  • 每个制品是否标注了«artifact»构造型
  • 通信路径是否标注协议和端口
  • 依赖关系是否用虚线箭头
  • 粒度是否统一(全服务器级 / 全容器级 / 全进程级)
  • 网络分区是否体现
  • [] 图中节点数量是否在可读范围(建议≤15个/张)
  • 是否有图例说明符号含义

总结

部署图是UML中唯一聚焦"物理部署"的图。它回答的不是"系统怎么设计",而是"系统怎么落地"。

掌握部署图的核心在于三点:理清节点层级(设备→执行环境→制品)、标注通信协议、保持统一粒度。画好一张部署图,运维团队拿到手就知道每台机器跑什么、端口怎么开、防火墙怎么配。

对于需要画部署图的团队,建议在 singcheng.com 上使用UML模板快速绘制,支持在线协作和模板复用,更多画图教程尽在 singcheng.com。


发布平台:星程图示· Singcheng