【从零开始学架构 架构基础】架构设计的本质、历史背景和目的

本文是《从零开始学架构》的第一篇学习笔记,主要理解架构的设计的本质定义、历史背景以及目的。

架构设计的本质

分别从三组概念的区别来理解架构设计。

系统与子系统

什么是系统,系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”

  • 关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统。例如,把一个发动机和一台 PC 放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。
  • 规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如,汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到车轮上,从而驱动汽车前进。
  • 能力:系统能力与个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新的能力。例如,汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力

子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分
在这里插入图片描述
例如微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统。朋友圈这个系统又包括动态、评论、点赞等子系统。评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统。评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统。例如,MySQL、Redis 等是存储系统,但不是业务子系统。

模块与组件

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。 划分模块的主要目的是职责分离;划分组件的主要目的是单元复用

  • 业务逻辑的角度来拆分系统后,得到的单元就是模块
  • 物理部署的角度来拆分系统后,得到的单元就是组件

以学生管理系统为例,从业务逻辑的角度分解,有如下模块
在这里插入图片描述
从物理部署的角度分解,有如下组件:
在这里插入图片描述
子系统是独立运行的,模块是子系统的逻辑组成部分,如果学生管理系统规模很大(例如在线学校),需要支撑每秒上万的登录请求,那么学生管理的登录模块可以升级为子系统

框架与架构

软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品

  • 框架是组件规范,例如,MVC 就是一种最常见的开发规范
  • 框架提供基础功能的产品,例如,Spring MVC 是 MVC 的开发框架,除了满足 MVC 的规范,Spring 提供了很多基础功能来帮助我们实现功能,包括注解(@Controller 等)、Spring Security、Spring JPA 等很多基础功能

软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
在这里插入图片描述

框架关注的是“规范”,架构关注的是“结构”

4R架构方法

软件架构指软件系统的顶层(Rank)结构,它定义了系统由哪些角色(Role)组成,角色之间的关系(Relation)和运作规则(Rule)
在这里插入图片描述

4R 是指 4 个关键词:Rank,Role,Relation 和 Rule。既然可以通过 4R 来定义软件系统的架构,那么按照 4R 架构定义的思路来画架构图也是很合情合理的,具体步骤如下

  • 第一步,明确 Rank:它是指软件架构是分层的,对应“系统”和“子系统”的分层关系。不要事无巨细地把一个大系统的方方面面都在一张架构图中展现出来,而应该明确你要阐述的系统所属的级别(L0~L4),然后只描述这个级别的架构信息。
  • 第二步,画出 Role:指软件系统包含哪些角色,每个角色都会负责系统的一部分功能。架构设计最重要的工作之一就是将系统拆分为多个角色,角色对应架构图中的区块、图标和节点等。
  • 第三步,画出 Relation:有了角色后,画出角色之间的关系,对应架构图中角色之间的连接线,不同的连接线可以代表不同的关系。
  • 第四步,最后画出 Rule:挑选核心场景,画出系统角色之间如何协作来完成某项具体的业务功能,对应系统序列图。

为了方便理解,Rank、Role 和 Relation 是通过系统架构图来展示的,而 Rule 是通过系统序列图(System Sequence Diagram)来展示的,以支付系统为例,顶层为支付系统,描述其子系统角色及角色之间的关系
在这里插入图片描述
“扫码支付”这个核心场景的系统序列图如下所示:
在这里插入图片描述

软件架构的历史背景

机器语言(太难写、太难读、太难改)-》汇编语言(仍然面向机器)-》高级语言(不再面向机器)-》结构化程序设计【模块】-》面向对象程序设计【对象】-》软件架构【组件】
在这里插入图片描述

软件设计过程中,模块、对象、组件本质上是对一定规模软件在不同粒度和层次上的“拆分”方法论(随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高),软件架构是一种对软件的“组织”方法论。一分一合,其目的是为了软件研发过程中的成本、进度、质量得到有效控制。一个成功的软件设计是要适应并满足业务需求,同时不断“演化”。设计需要根据业务的变化、技术的发展不断进行“演进”,这就决定了这是一个动态活动,出现新问题,解决新问题,没有所谓的“一招鲜”。

软件架构的目的

不是所有系统都需要架构设计,也不需要每个架构都具备高性能、高可用、高扩展等特点,架构设计的主要目的是为了解决软件系统复杂度带来的问题
在这里插入图片描述

总结一下

Rank分层区分系统与子系统暂时隔离关注面,在一个系统层面上,其子系统就是角色Role,子系统之间的关系就是Relation,一个核心的业务流程Rule可能涉及多个子系统的交互。如果子系统就是最小层级业务系统,那么它从逻辑层面讲可能包含很多模块,从部署的角度讲也包含很多组件,单个子系统可以使用springBoot框架搭建,遵守其规范使用其功能;软件架构没有银弹,是以解决系统复杂度为目的而随业务演进的方法论。知道WHAT,WHY,才能更好的学习HOW。

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

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

相关文章

领域驱动设计架构演进

领域驱动设计由于其强调对领域的深入理解和关注业务价值,其架构演进依赖于领域的变化和特定领域中的技术实践。 初始阶段 一个单体架构,所有的功能都集成在一个应用程序中,领域模型可能还不完全清晰,甚至并未形成。这个阶段主要是为了验证产品的可行性,快速迭代并尽快推…

mysql查询表信息(表名、表结构、字段信息等)

MySQL中,您可以使用以下SQL查询数据库的表信息或者某个表中具体的信息,例如:字段、字段描述、索引等,以下为具体的SQL: 1、查询数据库所有表信息(表名/表描述) SELECTtable_name name,TABLE_C…

在Altium Designer 实现元器件旋转45°放置

在Preferences >> PCB Editor >> General中将Rotation Step(旋转的步进值)由90改为45,这样以后每次按空格键旋转器件时旋转角度为45。

【k8s多集群管理平台开发实践】十、client-go实现读取pvc列表、pv列表、storageclass列表

文章目录 简介 一.k8s读取pvc列表1.1.controllers控制器代码1.2.models模型代码 二.k8s读取pv列表2.1.controllers控制器代码2.2.models模分代码 三.k8s读取storageclass列表3.1.controllers控制器代码3.2.models模型代码 四.路由设置4.1.路由设置 五.前端代码5.1.pvc列表的htm…

内网穿透使用教程

什么是内网穿透 内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑&#xff0c…

算法学习008-登山爬石梯 c++动态规划/递归算法实现 中小学算法思维学习 信奥算法解析

目录 C登山爬石梯 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C登山爬石梯 一、题目要求 1、编程实现 小明周末和朋友约好了一起去爬山,来到山下,发现登山道是…

医疗器械软件如何生成符合FDA要求的SBOM文件?

在当今这个高度互联的世界,医疗器械的安全性和可靠性对于保障公众健康至关重要。FDA作为美国食品和药物的主要监管机构,长期以来一直致力于确保医疗器械的安全性和有效性。 2023年9月27日,美国食品和药品监督管理局(后续简称FDA&…

Activity工作流基本知识点

1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的…

行业新应用:电机驱动将成为机器人的动力核心

电机已经遍布当今社会人们生活的方方面面,不仅应用范围越来越广,更新换代的速度也日益加快。按照工作电源分类,可以将它划分为直流电机和交流电机两大类型。直流电机中,按照线圈类型分类,又可以分为有铁芯的电机、空心…

如何查看近50年的历史影像?

天地图最近上线了2024版,全面更新了覆盖全国的在线地图服务。 本次更新首次开放多时相卫星影像,可查看32个省级节点近半个世纪的历史影像。 2024版天地图有哪些更新? 2024版天地图的更新优化主要包括: 1、新增上海市黄浦区、徐…

中国护照照片尺寸分辨率要求及居家自拍制作教程

经常出国的小伙伴都知道,护照照片作为出国旅行的重要身份证明文件,其规格和质量要求非常严格。本文将详细介绍中国护照照片的具体要求,并提供一些实用的居家自拍技巧,帮助您轻松拍出符合规定的护照照片(手机和相机居家…

.Net Core/.Net6/.Net8 实现前端控制台输出

.Net Core/.Net6/.Net8 实现前端控制台输出 场景描述实现思路 代码添加/入队读取列表前端效果 场景描述 公司会接一些小项目开发,部署到客户方后,不方便进行debug 项目以webapi服务为主 实现思路 通过静态类和队列将最近发生的一些内容缓存起来 通过接口…

公众号旧主体执照注销了,账号冻结怎么迁移?

公众号迁移有什么作用?只能变更主体吗?最近有几个学校里面的学生找我咨询“说他们学校的公众号是之前一个学长用自己的身份信息注册的,每次换届的时候,就要麻烦学长重新绑定新的运营者,就想问问有没有办法可以把他的公…

英文文本标点恢复

文章目录 一、安装 rpunct二、使用三、下载模型时报错1、报错详情2、报错原因3、解决方案 四、程序运行时报错1、报错详情2、报错原因3、解决方案 五、修改默认缓存路径 一、安装 rpunct pip install rpunct 相关依赖包信息: langdetect1.0.9 pandas1.2.4 simpletr…

创造极致体验!5个让用户爱不释手的APP按钮设计秘诀

完美的应用程序设计离不开完美的应用程序按钮设计。应用程序按钮是UI界面不可缺少的UI组件之一。一个好的应用程序按钮可以使用户更容易与界面交互,从而提高应用程序应用程序的转换率。本文将围绕应用程序按钮进行解释,以帮助您创建一个具有良好用户体验…

【易错题】第六章-业务数据分析 #CDA Level 1

目录 一. 指标作用与理解 二. 基本指标 1)求和类(常规求和、累计求和) 2)*比较类(均比、同比、环比、定基比、标准比) 三. 场景指标 1)*流量相关指标(访客数UV、浏览量PV、访问…

【贪心算法】最小生成树Kruskal算法Python实现

文章目录 [toc]问题描述最小生成树的性质证明 Kruskal算法Python实现时间复杂性 问题描述 设 G ( V , E ) G (V , E) G(V,E)是无向连通带权图, E E E中每条边 ( v , w ) (v , w) (v,w)的权为 c [ v ] [ w ] c[v][w] c[v][w]如果 G G G的一个子图 G ′ G^{} G′是…

accelerator入门

一、目录 1 定义 2. DP、DPP的区别 3 实现 4. 测试比较 二、实现 定义 accelerator 是由大名鼎鼎的huggingface发布的,专门适用于Pytorch的分布式训练框架,是torchrun 的封装。 GitHub: https://github.com/huggingface/accelerate 官网教程:https://…

WPF之多种视图切换

1&#xff0c;View切换&#xff0c;效果呈现 视图1 视图2 视图3 2&#xff0c;在Xaml中添加Listview控件&#xff0c;Combobox控件。 <Grid ><Grid.RowDefinitions><RowDefinition Height"143*"/><RowDefinition Height"30"/>&l…

【Linux】常用基本指令

目录 食用说明 用户管理 whoami/who clear tree 目录结构和路径 pwd ls 文件 隐藏文件 常用选项 cd 家目录、根目录、绝对路径和相对路径 touch 常用选项 mkdir rmdir/rm man cp mv cat nano echo 输出重定向 > 输入重定向 < more/less head/…