《如何画好架构图》学习笔记

news2024/11/14 20:17:17

看了一堂《如何画好架构图》的公开课,结合网上的资料与经验做一些思考总结。文中的例子和图片大多是从课程中摘录的。

1. 4R架构定义

4R架构定义其实是软件架构定义经过归纳提炼后的简称。
软件架构定义:软件架构是指软件系统的顶层(Rank)结构。它定义了系统由哪些角色(Role)组成,并描述了角色的关系(Relation)和运作规则(Rule)。关键词为 RankRoleRelationRule,所以简称为4R架构定义
在这里插入图片描述

1.1 Rank

Rank指软件架构是分层的,是自上而下逐层细化的。大部分情况下,我们在讨论或画架构图的时候会针对某一层展开,最多涉及到3-4层,但是一定不要试图把每一层都搅合在一起进行讨论或画图。做架构的时候可以自上而下思考,在确定顶层之后逐层细化拆解,一般不要超过5层。下图是微信架构的例子。
在这里插入图片描述

1.2 Role

Role指在软件系统中的角色。角色就是每一层架构的组成部分,在每一层对应不同的内容,它可以是大的业务系统,也可以是小的能力、模块。

1.3 Relation

Relation指的是软件系统中各角色的关系。角色要放在一个层必然是存在某种关系的,或是相互合作为用户提供服务,或是数据上下游关系等。在讨论架构或画架构图的时候要能够清晰的定义这些关系。

1.4 Rule

Rule是指软件系统角色之间如何协作来完成系统功能。软件的目的是为用户提供服务,既然是提供服务则软件系统必然是运动的,这其中的运行逻辑就是规则。

2. 架构图的分类

在4R架构定义中可以把架构图分为两大类:静态架构图动态架构图。在选定要讨论的层次(Rank) 之后,静态架构图描述系统架构中存在哪些角色(Role) 和角色之间的关系(Relation),动态架构图描述角色之间的协作规则(Rule)。两类架构图结合在一起看就能够了解到整个系统架构的全貌。
在这里插入图片描述

2.1 静态架构图

五种静态架构图中分别从业务角度、系统角度、物理角度描述了软件系统。
业务角度 是站在用户视角看系统,这个系统为我提供了什么样的服务。
系统视角 是从系统内部看系统,能看到系统内部有些什么能力,这些能力也许不能直接为用户提供服务,需要组合在一起才能完成服务。
物理角度 则是站在硬件层看系统,关注的是系统所需要的服务器、使用的中间件、机房位置、网络等信息。
在这里插入图片描述

2.1.1 业务架构图

业务架构图 描述的是系统对用户提供了什么业务功能,我理解为从业务角度来描述系统。一般用于给不了解系统的人介绍系统使用(业务概览),常在答辩、面试、培训等场景用到。
核心目的 是描述这个系统对用户提供了哪几个服务,这几个服务分别包含哪些功能(即告诉别人这个系统是干什么的)。
在这里插入图片描述

图片是从《如何画好架构图》里摘录的,这个例子里选取的层次是支付宝香港的业务。L0层是 钱包业务、商家服务、第三方业务和用户管理,这几个虚线框内部的是L1层。

2.1.2 前端架构图、系统架构图

客户端/前端架构图系统架构图 从系统角度分别对前后端的架构进行了描述,常用于技术设计讨论、汇报、面试等场景。
核心目的 描述系统中现有的能力,能力点的逻辑划分及能力之间的关系。这里的能力可以是大的聚合能力,也可以是小的原子能力。
客户端/前端架构图
在这里插入图片描述

系统架构图
在这里插入图片描述

上面的系统架构图中核心描述的是支付中台内的系统架构,支付中台是L0,收银台、开放平台、配置中心、交易中心等是L1,内部最小的方框是L2。向看图的人展现了整个支付中台中的业务模块及各模块中的业务能力。因为这张系统架构图复杂度较高,所以没有标注关系,课程里也单独画了一张关系图如下。两张图(对应Role和Relation)结合在一起看就是整个系统架构的全貌。
在这里插入图片描述

2.1.3 应用架构图

应用架构图 也是从系统角度出发,主要针对后端的架构进行描述。常用于技术设计讨论、汇报、面试等场景。
应用架构图 从字面理解是描述整个系统拆分出的所有应用及应用之间的关系。而应用往往是按照能力归类划分,一类能力归属一个应用,如用户的增删改查都放到用户服务里。换言之 应用架构图 的核心目的是描述的是系统中的各类能力以及能力之间的关系。个人感觉 应用架构图 相比 系统架构图 层次更深,更偏向技术视角。
在这里插入图片描述

如果是微服务架构,则图里的每个Server就是一个微服务。如果是单体架构即一个系统只有一个应用,则这里面的Server可能是一个类或一个Package对外暴露的接口。在单体架构中应用架构图也可以是系统架构图。

2.1.4 部署架构图

部署架构图 偏物理视角,描述的是整个系统的应用部署、机房、中间件及网络等信息。主要应用于整体系统架构设计,运维规划和优化。
核心目的 是描述整个系统如何部署。
在这里插入图片描述

大型的互联网系统,需要考虑多城市部署,异地多活等方案,就需要做部署架构图

2.2 动态架构图

动态架构图 主要描述系统中角色之间的互相协作规则(Rule),主要使用系统序列图来表现。

2.2.1 系统序列图

系统序列图 表示的是系统的一个核心场景的执行逻辑,每个核心场景都需要系统序列图。常用于需求设计、汇报等场景。
核心目的 是描述核心场景中系统的运行规则。只关注核心场景是因为核心场景重要且稳定(不易变化)。非核心场景数量多且易变化,一般只在做需求设计的时候画序列图。
在这里插入图片描述

3. 画图要点

个人理解画图没有统一的规范,能把系统说清楚就可以。有一些注意事项有些来自他人的文章,有些过往经验,在这里做一些总结。

简单专注
画图尽量简单专注,选好要讨论的层次,一般一张图最多涉及3-4层。大而全的图一般画不清楚,也看不清楚。读者思维,根据待讨论的问题画图。

颜色的用途
颜色使用没有统一的规定,可以根据具体的情况灵活使用。可以用来区分状态,也可以用来区分领域、模块等。如果图中使用了颜色的话,比较好的做法是在某个角落增加颜色说明(如 灰色代表功能未实现等)。

颜色的数量
一张图片中的颜色不宜过多,一般最多不超过3个。颜色过多可能会导致看起来不专业,同时也会让看图的人抓不到重点。如果画图的时候发现要用到很多颜色,可能是把不同层次的问题放到了一张图里,可以根据看图的人确定要讨论的问题然后突出重点。

画里的关系
并不是所有的关系都需要在图里表现,一般只需要表现出重要的关系。有时候系统里的调用关系复杂,全画出来只会让人看的云里雾里抓不到重点。

关系的表现
表现关系的形式有很多,最明显的是在多个角色之间连线,一般连线上要写上文字说明,方便理解,带不带箭头根据实际情况判断。如果关系是简单的关系如并列关系、构成关系等,可以不需要连线,直接用方框的位置来表达。

复杂的关系
如果系统比较复杂,包含的角色特别多关系也特别复杂,可以把角色和关系分开画。有时描述角色的图为了展示系统全貌会加入很多角色,部分角色的关系其实对于本次讨论没有太大的影响。此时可以单独画一张描述关系的图,在图中更加专注核心的角色。

炫酷的图标
有些图画的非常美观,有很多图标。但是大部分情况下,我们用线框图也可以表达出同样的意思。有些图标获取成本比较低且很常用(如服务器、数据库等都是画图工具自带的),用一下也是极好的。

4. 参考资料

公开课:《如何画好架构图》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue好看的组件库:Element

文章目录 1、什么是Element2、Element快速入门3、Element布局3.1、 Layout 局部3.2、容器布局 1、什么是Element Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库,用于快速构建网页 Element 提供了很多组件(组成网页的部件…

2024-01-24(ElasticSearch)

1.mysql和elasticsearch的架构: 2.IK分词器利于分中文词汇。 底层是有一个中文字典,这个字典中的中文词汇也是可以拓展的和禁用某些词。 3.mapping常见属性: type:数据类型 index:是否索引 analyzer:分…

记录一下uniapp 集成腾讯im特别卡(已解决)

uniapp的项目运行在微信小程序 , 安卓 , ios手机三端 , 之前这个项目集成过im,不过版本太老了,0.x的版本, 现在需要添加客服功能,所以就升级了 由于是二开 , 也为了方便 , 沿用之前的webview嵌套腾讯IM的方案 , 选用uniapp集成ui ,升级之后所有安卓用户反馈点击进去特别卡,几…

构筑服务「护城河」,汽车品牌如何从 0 到 1 搭建语音质检体系

「质检」一词对于汽车行业并不陌生。商品生产商采用一定检验测试手段和检查方法测定产品的质量特性,从而判断产品的质量标准。 随着消费需求的多样化,越来越多的品牌开始重视商品背后的服务。尤其对于汽车这种高客单价的耐消品领域,商品带来的…

第12章_集合框架(Collection接口,Iterator接口,List,Set,Map,Collections工具类)

文章目录 第12章_集合框架本章专题与脉络1. 集合框架概述1.1 生活中的容器1.2 数组的特点与弊端1.3 Java集合框架体系1.4 集合的使用场景 2. Collection接口及方法2.1 添加2.2 判断2.3 删除2.4 其它 3. Iterator(迭代器)接口3.1 Iterator接口3.2 迭代器的执行原理3.3 foreach循…

JavaEE之多线程编程:4. 线程安全(重点!!!)

文章目录 一、观察线程不安全二、线程安全的概念三、线程不安全的原因1. 关于线程不安全的解释1. 抢占式执行2. 修改共享数据3. 原子性4. 可见性5. 指令重排序问题 四、解决之前的线程不安全的问题五、synchronized 关键字(两个线程同时修改一个变量)1. …

Mediasoup Demo-v3笔记(一)——框架和Nodejs的基本语法

Medisasop Demo的框架 Nodejs基本语法 后记   个人总结,欢迎转载、评论、批评指正

【Java】SpringMVC路径写法

1、多级路径 ✅类路径和方法路径都可以写成多级 ✅其中,类路径写在方法路径前面 ✅与Servlet不同,SpringMVC中写不写“/”都可以 RequestMapping("/hello/t1") RestController public class HelloSpring {RequestMapping( value "world…

mac 修改flutter sdk配置

问题描述:我mac电脑上有高低2个版本的flutter sdk,我需要低版本sdk的项目在setting里设置了sdk版本,可是命令行还是提示我版本过高。 直接上解决办法: 打开mac终端,输入open -e .bash_profile,然后修改下…

ChatGPT 全域调教高手:成为人工智能交流专家

随着人工智能的快速发展,ChatGPT作为一种强大的文本生成模型,在各行各业中越来越受到重视和应用。想要利用ChatGPT实现更加智能、自然的交流,成为 ChatGPT 全域调教高手吗?本文将为您介绍如何通过优化ChatGPT的训练方法&#xff0…

KADB使用PXF连接KES验证

验证环境 KADB版本:Greenplum Database 6.0.0 build dev.V003R002C001B0181.d354cc9215 KES版本:KingbaseES V008R006C007B0012 Java版本:openjdk version "1.8.0_262" PXF部署 以下操作假设KADB和KES已经部署完成并且启动正常…

C++笔试强训选择题 3

1.以下程序的输出结果是&#xff08;&#xff09; #include <iostream.h> int main() {int x3,y3;switch(x%2){case 1:switch (y){case 0:cout<<"first";case 1:cout<<"second";break;default:cout<<"hello";}case 2:c…

【Python】01快速上手爬虫案例一

文章目录 前言一、VSCodePython环境搭建二、爬虫案例一1、爬取第一页数据2、爬取所有页数据3、格式化html数据4、导出excel文件 前言 实战是最好的老师&#xff0c;直接案例操作&#xff0c;快速上手。 案例一&#xff0c;爬取数据&#xff0c;最终效果图&#xff1a; 一、VS…

网络通信课程总结(小飞有点东西)

27集 局域网通信&#xff1a;用MAC地址 跨局域网通信&#xff1a;用IP地址&#xff08;MAC地址的作用只是让我们找到网关&#xff09; 又因为arp技术&#xff0c;可以通过MAC地址找到IP地址&#xff0c;所以我们可以通过IP地址定位到全世界任意一台计算机。 28集 在数据链路…

基于Java SSM框架实现在线教育资源管理系统项目【项目源码+论文说明】

基于java的SSM框架在线教育资源管理系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线教育资源管理系统&#xff0c;主要的模块包括管理员&#xff1b;个人中心、学生管理、教师管…

【Vue2 + ElementUI】分页el-pagination 封装成公用组件

效果图 实现 &#xff08;1&#xff09;公共组件 <template><nav class"pagination-nav"><el-pagination class"page-area" size-change"handleSizeChange" current-change"handleCurrentChange":current-page"c…

【项目日记(四)】第一层: 线程缓存的具体实现

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

语义分割 | 基于 VGG16 预训练网络和 Segnet 架构实现迁移学习

Hi&#xff0c;大家好&#xff0c;我是源于花海。本文主要使用数据标注工具 Labelme 对猫&#xff08;cat&#xff09;和狗&#xff08;dog&#xff09;这两种训练样本进行标注&#xff0c;使用预训练模型 VGG16 作为卷积基&#xff0c;并在其之上添加了全连接层。基于标注样本…

客户大批量保密文件销毁,数据销毁新方案及实践 文件销毁 硬盘销毁 数据销毁 物料销毁

2023年春节前夕&#xff0c;青岛客户经理接到一个电话&#xff0c;韩国驻华机构想请我们做文件销毁&#xff0c;要求在2天内销毁800多箱纸文件。800多箱需要在短短两天内完成销毁&#xff0c;这一数字创下了淼一文件数据销毁自2009年以来的历史记录。单从业绩和营销角度看&…

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引&#xff0c;却又惋惜于无法将其永久保存&#xff1f;现在&#xff0c;有了我们【媒体梦工厂】&#xff0c;这一遗憾将成为过去&#xff0c;这个软件可以提取视频中的某一帧保存为图片&#xff0c;为你留住那些稍纵即逝的美好。 所需工…