1.概述
部署图是一种结构图,用于描述软件系统在不同计算机硬件或设备上的部署和配置情况,以图形化的方式展示系统中组件、节点和连接之间的物理部署关系。
通过部署图,可以清晰地了解系统的物理结构和部署方式,包括系统组件和节点的数量、位置、连接方式、负载均衡、冗余备份等配置信息,让软件开发团队与系统管理员能更直观的了解系统的部署情况,为系统在后续的性能优化和拓展打下基础。
同时,部署图也经常会出现在软件项目文档中,用于记录系统的物理部署情况。
2.部署图的使用方法
2.1.部署图的组成部分
基础的部署图一般是由3种图形组成,分别是节点、组件、连线,如下图:
- 节点:是一个长方体,表示的是计算资源或者执行环境,既可以是硬件(服务器)也可以是软件(OS,虚拟机等)
- 组件:是一个带有两个标签的矩形,表示的是可部署的软件模块(即封装了代码和数据的类、库、文件等)。
- 连线:一般在连线上会标注通信协议,用于表示节点、组件之间的通信和交互关系。
有时候也会使用长方形来表示构件,比如Nginx
、MySQL
等直接部署的中间件,如果要更清晰的表达构件的含义,可以在构件名称上面使用<<artifact>>
来进行标注。
构件和组件的区别在于,组件一般是当前项目中开发者写的代码打包后形成的系统或服务,当然,在不需要做这么严格的区分时,也可以直接使用组件的图标来表示构件。
2.2.图标的组合
节点有两种类型,一种是拥有计算资源的硬件,例如:PC、笔记本电脑、手机、服务器、打印机等。另一种是运行环境,例如:操作系统、虚拟机、JVM等。
节点与节点
一个节点可以嵌入到另一个节点中,如下图表示在个人电脑上安装了Win10系统:
节点与组件/构件
组件和构件可以嵌入到节点中,表示部署到当前节点上,可以嵌入到运行环境节点,如果对运行环境并不在意,可以忽略掉运行环境节点,直接嵌入到物理节点上:
2.3.画部署图
先看一张BS架构的极简部署图:
有两个系统和MySQL部署在了应用服务器,前置了一个网关服务器部署了Nginx对外提供服务,用户通过PC中的浏览器进行访问。从图可以明确网络通信的方式和链路,以及组件和构件在物理机上的部署情况。
可以看到,部署图画起来是比较简单的,只是在画图之前需要经历一些思考步骤:
- 范围:部署图涵盖的范围是多大,是一个模块,一个子系统,还是整个项目的部署情况。
- 架构:针对当前这个范围会使用到什么架构,单体架构、分布式架构等等。
- 节点:明确整个部署结构中有哪些节点
- 组件:明确组件和构件的组成,分别部署到哪些节点上
- 协议:节点或组件之间会建立哪些通信,通信协议是TCP/IP、MQTT、AMQP还是其他。
- ……
做好一定的准备之后就可以开始动手画图啦,下面是一个交易系统部署图(简化版)画图步骤。
- 首先确定范围,是整个交易系统及其依赖的其他服务和中间件。
- 确定采用分布式架构,需要多台应用服务器。
- 确定节点信息,包含客户端、网关、应用服务器、数据库服务器、缓存服务器等
- 确定组件和构件信息,包含用户系统、交易系统、Nginx、MySQL、Redis等
- 确定协议,节点、组件之间的通信主要通过TCP/IP进行交互
然后经过一点点加工就得到了一个部署图
3.总结
基本的部署图包含3种图标,即节点、组件、连线,有时候为了做区分还会加入构件图标,只需要按照步骤明确自己想表达的信息,将这几个简单的图标进行组合使用,就可以得到一个从宏观层面观看的信息丰富的部署图。
需要注意的是:不建议在部署图上描述过于细节的信息,整个项目的全貌可以借助不同的uml图例在多个切面维度上进行描述。