当前位置: 首页 > news >正文

【UML建模】部署图(Deployment Diagram)

1.概述

部署图是一种结构图,用于描述软件系统在不同计算机硬件或设备上的部署和配置情况,以图形化的方式展示系统中组件、节点和连接之间的物理部署关系。

通过部署图,可以清晰地了解系统的物理结构和部署方式,包括系统组件和节点的数量、位置、连接方式、负载均衡、冗余备份等配置信息,让软件开发团队与系统管理员能更直观的了解系统的部署情况,为系统在后续的性能优化和拓展打下基础。
同时,部署图也经常会出现在软件项目文档中,用于记录系统的物理部署情况。

2.部署图的使用方法

2.1.部署图的组成部分

基础的部署图一般是由3种图形组成,分别是节点、组件、连线,如下图:
在这里插入图片描述

  • 节点:是一个长方体,表示的是计算资源或者执行环境,既可以是硬件(服务器)也可以是软件(OS,虚拟机等)
  • 组件:是一个带有两个标签的矩形,表示的是可部署的软件模块(即封装了代码和数据的类、库、文件等)。
  • 连线:一般在连线上会标注通信协议,用于表示节点、组件之间的通信和交互关系。

在这里插入图片描述

有时候也会使用长方形来表示构件,比如NginxMySQL等直接部署的中间件,如果要更清晰的表达构件的含义,可以在构件名称上面使用<<artifact>>来进行标注。

构件组件的区别在于,组件一般是当前项目中开发者写的代码打包后形成的系统或服务,当然,在不需要做这么严格的区分时,也可以直接使用组件的图标来表示构件。

2.2.图标的组合

节点有两种类型,一种是拥有计算资源的硬件,例如:PC、笔记本电脑、手机、服务器、打印机等。另一种是运行环境,例如:操作系统、虚拟机、JVM等。

节点与节点
一个节点可以嵌入到另一个节点中,如下图表示在个人电脑上安装了Win10系统:
在这里插入图片描述
节点与组件/构件
组件和构件可以嵌入到节点中,表示部署到当前节点上,可以嵌入到运行环境节点,如果对运行环境并不在意,可以忽略掉运行环境节点,直接嵌入到物理节点上:
在这里插入图片描述

2.3.画部署图

先看一张BS架构的极简部署图:
在这里插入图片描述
有两个系统和MySQL部署在了应用服务器,前置了一个网关服务器部署了Nginx对外提供服务,用户通过PC中的浏览器进行访问。从图可以明确网络通信的方式和链路,以及组件和构件在物理机上的部署情况。


可以看到,部署图画起来是比较简单的,只是在画图之前需要经历一些思考步骤:

  • 范围:部署图涵盖的范围是多大,是一个模块,一个子系统,还是整个项目的部署情况。
  • 架构:针对当前这个范围会使用到什么架构,单体架构、分布式架构等等。
  • 节点:明确整个部署结构中有哪些节点
  • 组件:明确组件和构件的组成,分别部署到哪些节点上
  • 协议:节点或组件之间会建立哪些通信,通信协议是TCP/IP、MQTT、AMQP还是其他。
  • ……

做好一定的准备之后就可以开始动手画图啦,下面是一个交易系统部署图(简化版)画图步骤。

  • 首先确定范围,是整个交易系统及其依赖的其他服务和中间件
  • 确定采用分布式架构,需要多台应用服务器。
  • 确定节点信息,包含客户端、网关、应用服务器、数据库服务器、缓存服务器
  • 确定组件和构件信息,包含用户系统、交易系统、Nginx、MySQL、Redis
  • 确定协议,节点、组件之间的通信主要通过TCP/IP进行交互

然后经过一点点加工就得到了一个部署图
在这里插入图片描述

3.总结

基本的部署图包含3种图标,即节点、组件、连线,有时候为了做区分还会加入构件图标,只需要按照步骤明确自己想表达的信息,将这几个简单的图标进行组合使用,就可以得到一个从宏观层面观看的信息丰富的部署图。

需要注意的是:不建议在部署图上描述过于细节的信息,整个项目的全貌可以借助不同的uml图例在多个切面维度上进行描述。

http://www.lryc.cn/news/273918.html

相关文章:

  • 三、计算机理论-关系数据库-数据模型与数据视图;关系代数、关系演算及关系模型
  • 解读 $mash 通证 “Fair Launch” 规则(Staking 玩法解读篇)
  • 【C语言】关于C11的一些新特性
  • 牛的速记(c++题解)
  • 使用ffmpeg+flv.js + websokect播放rtsp格式视频流
  • OAI openair3代码结构整理
  • Kubernets(K8S)启动和运行 01-01 Kubernetes简介
  • PHP特性知识点扫盲 - 下篇
  • HarmonyOS应用开发之DevEco Studio安装与初次使用
  • 记录第一次在GitHub上面提交Issue
  • 【数据库设计和SQL基础语法】--用户权限管理--数据备份和恢复策略
  • java数据结构与算法刷题-----LeetCode70. 爬楼梯
  • 【Unity入门】UGUI之Slider(滑动条)
  • MySQL中UNION和UNION ALL的区别有哪些?
  • Android kotlin build.gradle.kts配置
  • css、js、vue常考部分面试题
  • OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice
  • 二叉搜索树与双向链表
  • uniapp中组件库的Checkbox 复选框 的丰富使用方法
  • Spring Cloud + Vue前后端分离-第10章 基于阿里云OSS的文件上传
  • C++ 中的耗时计算函数
  • 【Element】el-form和el-table嵌套实现表格编辑并提交表单校验
  • 初识Winform
  • Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)
  • 前端优化之一:dns预获取 dns-prefetch 提升页面载入速度
  • C语言中一些基本数据类型的典型大小
  • [C/C++]排序算法 快速排序 (递归与非递归)
  • 『年度总结』逐梦编程之始:我的2023学习回顾与展望
  • MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发
  • 【React系列】受控非受控组件