2025系统架构师(一考就过):案例之三:架构风格总结

news/2025/2/26 13:31:05

在这里插入图片描述
在这里插入图片描述

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,按照软件架构风格,物联网系统属于( )软件架构风格。

A:层次型

B:事件系统

C:数据线

D:C2

答案:A

解析

物联网分为多个层次,一般有感知层、网络层、应用层等

◆软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式架构风格定义一个系统家族,即一个架构定义、一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件架构风格的研究和实践会促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。
架构设计的一个核心问题是能否达到架构级的软件复用。
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则

◆数据流风格:面向数据流,按照一定的顺序从前向后执行程序,代表的风格有批处理序列、管道-过滤器
◆调用/返回风格: 构件之间存在互相调用的关系,一般是显式的调用,代表的风格有 主程序/子程序、面向对象、层次结构
◆独立构件风格: 构件之间是互相独立的,不存在显式的调用关系,而是通过某个事件触发、异步的方式来执行,代表的风格有 进程通信、事件驱动系统(隐式调用)
◆虚拟机风格: 自定义了一套规则供使用者使用,使用者基于这个规则来开发构件,能够跨平台适配,代表的风格有 解释器、基于规则的系统
◆仓库风格: 以数据为中心,所有的操作都是围绕建立的数据中心进行的,代表的风格有 数据库系统、超文本系统、黑板系统

软件体系结构风格是描述某一特定应用领城中系统组织方式的惯用模式。其中,在批处理风格软件体系结构中,每个处理步骤是一个单独的程序,每一步必须在前一步结束后才能开始,并且数据必须是完整的,以(1)的方式传递,基于规则的系统包括规则集、规则解释器、规则/数据选择器及(2)。

1-A:迭代 1-B:整体

1-C:统一风格 1-D:递增

2-A:解释内存 2-B:虚拟机

2-C:数据 2-D:工作内存

答案:1-B、2-D

解析:

批处理风格:

  1. 每个处理步骤是一个单独的程序;
  2. 每一步必须在前一步结束后才能开始;
  3. 数据必须是完整的;
  4. 以整体的方式传递。

基于规则的系统包括规则集、规则解释器、规则/数据选择器及工作内存,一般用于人工智能和决策支持系统中。

1、数据流风格

数据流风格
◆批处理序列: 构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。

◆管道-过滤器: 每个构件都有一组输入和输出,构件读取输入的数据流,经过内部处理,产生输出数据流。前一个构件的输出作为后一个构件的输入,前后数据流关联。过滤器就是构件,连接件就是管道。

早期编译器就是采用的这种架构(数据流),要一步一步处理的,均可考虑此架构风格
◆二者区别在于批处理前后构件不一定有关联,并且是作为整体传递,即必须前一个执行完才能执行下一
管道-过滤器是前一个输出作为后一个输入,前面执行到部分可以开始下一个的执行。

批处理:必须是一件一件的处理,先处理第一件,然后第二件,然后第三件…,前一件结束了,下一件才能开始。

​ 构件1、构件2、构件3…它们是一个整体。

管道-过滤器:比如流媒体,边看变缓存、边看边下载的这种方式就是管道过滤器;而必须先下载完才能看的这是批处理。这里就可以把缓存和看视频看成两个构件。

构件可以理解为一个功能,一个类模块…

2、调用/返回风格

调用/返回风格
◆主程序/子程序: 单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,充当连接件的角色。
◆面向对象: 构件是对象,对象是抽象数据类型的实例。连接件即是对象间交互的方式,对象是通过函数和过程的调用来交互的。
◆层次结构: 构件组成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。修改某一层,最多影响其相邻的两层(通常只能影响上层)。
◆层次结构优点:
1、支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。
2、不同的层次处于不同的抽象级别,越靠近底层,抽象级别越高。
3、由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件复用提供了强大的支持。
◆缺点:
1、并不是每个系统都可以很容易的划分为分层的模式
2、很难找到一个合适的、正确的层次抽象方法

越靠近底层,抽象级别越高。 的意思是 越底层,越跟业务关系不大,越偏向通用的数据结构、通用的算法等。

1、层次架构风格
1、两层 C/S架构

◆两层C/S架构: 客户端和服务器都有处理功能,现在已经不常用,原因有:开发成本较高、客户端程序设计复杂、信息内容和形式单一、用户界面风格不一、软件移植困难、软件维护和升级困难、新技术不能轻易应用、安全性问题、服务器端压力大难以复用。

在这里插入图片描述

这里表示层为客户端;数据层为服务端。

2、三层C/S架构

表示层负责用户接口;

功能层(业务逻辑层)负责功能处理;

数据层负责数据持久存储;

◆三层C/S架构:将 处理功能独立出来,表示层和数据层都变得简单。 表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。即将两层C/S架构中的数据从服务器中独立出来了。其优点下面四点:
各层在逻辑上保持相对独立,整个系统的逻辑结构更为清晰,能提高系统和软件的可维护性和可扩展性;
◆允许 灵活有效的选用相应的平台和硬件系统,具有良好的可升级性和开放性
◆各层可以 并行开发,各层也可以选择各自最适合的开发语言
◆功能层有效的隔离表示层与数据层,为严格的安全管理奠定了坚实的基础, 整个系统的管理层次也更加合理和可控制
◆三层C/S架构设计的关键在于各层之间的通信效率,要慎重考虑三层间的通信方法、通信频度和数据量,否则即使分配给各层的硬件能力很强,性能也不高。

在这里插入图片描述

3、三层B/S架构

◆三层B/S架构是三层C/S架构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为网络上的WEB服务器,又称为0客户端架构,虽然不用开发客户端,但有很多缺点:
◆B/S架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能
◆安全性难以控制;
◆在数据查询等响应速度上,要远远低于C/S架构:
◆数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用

4、混合架构风格

◆混合架构风格
内外有别模型:企业内部使用C/S,外部人员访问使用B/S.
查改有别模型:采用B/S查询,采用C/S修改。
混合架构实现困难,且成本高。

5、富互联网应用RIA(即小程序)

富互联网应用RIA
◆弥补三层B/S架构存在的问题,RIA是一种用户接口,比用HTML实现的接口
更加健壮,且有可视化内容,本质还是网站模式,其优点如下:
◆RIA结合了C/S架构反应速度快、交互性强的优点与B/S架构传播范围广及容易传播的特性;
◆RIA简化并改进了B/S架构的用户交互
数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。
本质还是0客户端,借助于高速网速实现必要插件在本地的快速缓存。增强页面对动态页面的支持能力,典型的如小程序。

6、MVC 架构

MVC架构
(1)控制器(Controller):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
(2)模型(Model):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。模型表示业务数据和业务逻辑。
(3)视图(View):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理:

在这里插入图片描述

7、MVP 架构

MVP:MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断view跟Model之间的联系,由Presenter充当桥梁,做到View-Model之间通信的完全隔离。
MVP特点:
1、M、V、P之间双向通信
2、View与 Model不通信,都通过 Presenter传递。Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现:
3、View 非常薄,不部署任何业务逻辑,称为”被动视图”(PassiveView)。即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里
4、Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。

在这里插入图片描述

这里 MVP 架构雷同于 三层C/S架构

8、MVVM

MVVM:MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model),有几大优点:
1、低耦合,视图(View)可以独立于Model变化和修改,ViewModel可以绑定到不同的”View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2、可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3、独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
4、可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写。

在这里插入图片描述

3、独立构件风格

◆进程通信: 构件是独立的进程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用(RPC)等。
◆事件驱动系统(隐式调用): 构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一模块中的过程调用。这种风格中的构件是匿名的过程,它们之间交互的连接件往往是以过程之间的隐式调用来实现的。典型的比如:中断。
◆主要优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便;缺点是构件放弃了对系统计算的控制(因为是隐式控制,只能被动控制)。

4、虚拟机风格

虚拟机风格
◆解释器: 通常包括一个完成解释工作的解释引擎、一个包含将被解释的代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,缺点是执行效率低
◆基于规则的系统: 包括规则集、规则解释器、、规则/数据选择器和工作内存,一般用在人工智能领域和DSS(决策支持)中。

架构风格和设计模式:架构风格好比装修时的整体风格,比如欧式分风格;设计模式是在这个欧式风格下,开始对每个房间进行设计(不同房间可能是欧式风格下的不同类型)。

5、仓库风格

仓库风格,又叫数据共享风格,它是以数据为中心的。
◆数据库系统: 构件主要有两大类,一类是中央共享数据源,保存当前系统的数据状态;另一类是多个独立处理单元,处理单元对数据元素进行操作。 数据库系统就是常说的数据库。
◆黑板系统: 包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板; 黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介;知识源响应是通过黑板状态的变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中(信号处理、问题规划和编译器优化等)。 黑板系统就好比老师在黑板上写方程等知识;知识源就是老师。
◆超文本系统: 构件以网状链接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。是一种非线性的网状信息组织方法,它以节点为基本单位,链作为节点之间的联想式关联。通常应用在互联网领域。HTTP 就是超文本协议。
现代编译器的集成开发环境一般采用数据仓库(即以数据为中心的架构风格)架构风格进行开发,其中心数据就是程序的语法树。

6、闭环控制

当软件被用来操作一个物理系统时,软件与硬件之间可以粗略的表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态,适合于嵌入式系统,涉及连续的动作与状态,

在这里插入图片描述

比如典型的就是:空调。当前空调是30°,然后立即调到26°,此时房间的温度会慢慢的降到26°,而不会立即使房间降到26°。这个过程中空调会不断地调整冷气量等(不断地反馈),直到房间温度基本维持在26°。

比如典型的:汽车的自适应巡航。

7、C2 风格

C2体系结构风格可以概括为: 通过连接件绑定在一起的按照一组规则运作的并行构件网络。 C2风格中的系统组织规则如下:
(1)系统中的构件和连接件都有一个顶部和一个底部;
(2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
(3)一个连接件可以和任意数目的其它构件和连接件连接;
(4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部,

在这里插入图片描述

架构风格名常考关键字及实例简介
数据流-批处理传统编译器,每个阶段产生的一个接一个,以整体为单位
数据流-管道-过滤器结果作为下一个阶段的输入,
区别在于整体。
一个接一个,前一个输出是后一个输入。
调用/返回-主程序/子程序显示调用,主程序直接调用子程序。
调用/返回-面向对象对象是构件,通过对象调用封装的方法和属性。
调用/返回-层次结构分层,每层最多影响其上下两层,有调用关系。
独立构件-进程通信进程间独立的消息传递,同步异步
独立构件-事件驱动
(隐式调用)
事件触发推动动作,如程序语言的语法高亮、语法错误提示不直接调用,通过事件驱动。
虚拟机-解释器自定义流程,按流程执行,规则随时改变,灵活定义,业务灵活组合。
机器人。
解释自定义的规则,解释引擎、存储区、数据结构。执行效率低
虚拟机-规则系统自定义流程,按流程执行,规则随时改变,灵活定义,业务灵活组合。
机器人。
规则集、规则解释器、选择器和工作内存,用于 DSS 和人工智能、专家系统。
仓库-数据库现代编译器的集成开发环境IDE,以数据为中心。又称为数据共享风格中央共享数据源,独立处理单元。
仓库-超文本库现代编译器的集成开发环境IDE,以数据为中心。又称为数据共享风格网状链接,多用于互联网。
仓库-黑板现代编译器的集成开发环境IDE,以数据为中心。又称为数据共享风格语音识别、知识推理等问题复杂、解空间很大、求解过程不确定的这一类软件系统,黑板、知识源、控制。
闭环-过程控制汽车巡航定速,空调温度调节设定参数,并不断调整发出控制命令并接受反馈,循环往复达到平衡。
C2 风格构件和连接件、顶部和底部通过连接件绑定在一起按照一组规则运作的并行构件网络。
8、面向服务的架构风格

◆SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通信,不涉及底层编程接口和通信模型。
◆在SOA中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。
◆SOA并不仅仅是一种开发方法,还具有管理上的优点,管理员可直接管理开发人员所构建的相同服务。多个服务通过企业服务总线提出服务请求,由应用管理来进行处理,如下:

粗粒度:就是功能包含的越来越多;松耦合:就是服务之间是相互分离的

在这里插入图片描述

ESB 服务总线:比如服务1要调用服务2、服务3,而服务2又调用了服务3、服务4。不使用服务总线时,一般会想着直接在服务1里调用服务2、服务3,但是服务1调用的服务2、服务3中,服务2又同时调用了服务3、服务4,这个时候都在服务内部调用就比较麻烦、繁琐了。而服务总线就是将所有服务都挂在上面,任何服务想要调用别的服务,就要先给服务总线发消息,然后由服务总线转发消息给要调用的服务,进而调用对应服务。

这样就从原本的服务1里调用服务2、服务3这样的多对多变成了服务1发消息给服务总线,服务总线发消息给要调用的服务变成了一对多。

◆实施SOA的关键目标是实现企业IT资产重用的最大化,在实施SOA过程中要牢记以下特征:可从企业外部访问、随时可用(服务请求能被及时响应)、粗粒度接口(粗粒度提供一项特定的业务功能,而细粒度服务代表了技术构件方法)、服务分级、松散耦合(服务提供者和服务使用者分离)、可重用的服务及服务接口设计管理、标准化的接口(WSDL、SOAP、XML是核心)、支持各种消息模式、精确定义的服务接口。
◆从基于对象到基于构件再到基于服务,架构越来越松散耦合,粒度越来越粗,接口越来越标准。
◆基于服务的构件与传统构件的区别有四点:
①服务构件粗粒度,传统构件细粒度居多;
②服务构件的接口是标准的,主要是WSDL接口,而传统构件常以具体API形式出现;
③服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言,
④服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制。

SOA 中应用的关键技术如下表:

功能协议
发现服务UDDI、DISCO
描述服务WSDL、XML Schema
消息格式层SOAP、REST
编码格式层XML(DOM,SAX)
传输协议层HTTP、TCP/IP、SMTP等

◆UDDI: 是一套基于WEB的、分布式的、为Webservice提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Webservice注册,以使别的企业能够发现的访问协议的实现标准,用于WEB服务注册统一描述、发现及集成。
◆WSDL(Web Service描述语言): 将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程调用),用于描述服务。
◆SOAP(简单对象访问协议): 是用于交换XML编码信息的轻量级协议,用于传递信息,实现 Web 服务的远程调用。
◆XML(可扩展标记语言): 是WebService平台中表示数据的基本格式,用于数据交换

◆BPEL(面向Web服务的业务流程执行语言):用于将分散的、功能单一的 Web 服务组织成一个复杂的有机应用。使用BPEL,用户可以通过组合、编排和协调Web服务自上而下实现面向服务的体系结构(SOA)。BPEL提供了一种相对简单易懂的方法,可将多个Web服务组合到一个新的复合服务(称作业务流程)中。

1、SOA 的三种实现方式
1、WEB Service

服务提供者、服务注册中心(中介,提供交易平台,可有可无)、服务请求者。服务提供者将服务描述发布到服务注册中心,供服务请求者查找,查找到后,服务请求者将绑定查找结果。如图:

在这里插入图片描述

2、服务注册表

(1)服务注册: 应用开发者(服务提供者)在注册表中公布服务的功能。
(2)服务位置: 服务使用者(服务应用开发者),帮助他们查询注册服务,寻找符合自身要求的服务。
(3)服务绑定: 服务使用者利用检索到的服务接口来编写代码,所编写的代码将与注册的服务绑定,调用注册的服务,以及与它们实现互动。

3、ESB

◆企业服务总线ESB:简单来说是一根管道,用来连接各个服务节点。 ESB的存在是为了集成基于不同协议的不同服务,
ESB 做了消息的转化、解释以及路由的工作,以此来让不同的服务互联互通。

◆包括: 客户端(服务请求者)、基础架构服务(中间件)、核心集成服务(提供服务)

◆ESB的特点:

1、SOA的一种实现方式,ESB在面向服务的架构中起到的是总线作用,将各种服务进行连接与整合;
2、描述服务的元数据和服务注册管理
3、在服务请求者和提供者之间传递数据,以及对这些数据进行转换的能力,并支持由实践中总结出来的一些模式如同步模式、异步模式等:
4、发现、路由、匹配和选择的能力,以支持服务之间的动态交互,解耦服务请求者和服务提供者。高级一些的能力,包括对安全的支持、服务质量保证、可管理性和负载平衡等。

在这里插入图片描述

面向服务系统构建过程中,()用于实现Web服务的远程调用,()用来将分散的、功能单一的Web服务组织成一个复杂的有机应用。
A.UDDl(Universal Description, Discovery and Integration)
B.WSDL(Web Service Description Language)
C.SOAP(Simple Object Access Protocol)
D.BPEL(Business Process Execution Language)

A.UDDl(Universal Description, Discovery and Integration)
B.WSDL(Web Service Description Language)
C.SOAP(Simple Object Access Protocol)
D.BPEL(Business Process Execution Language)

答案:C、D


http://www.niftyadmin.cn/n/5868769.html

相关文章

ARM Cortex-M处理器中的MSP和PSP

在ARM Cortex-M系列处理器中,MSP(主堆栈指针)和PSP(进程堆栈指针)是两种不同的堆栈指针,主要用于实现堆栈隔离和提升系统可靠性。以下是它们的核心区别和应用场景: 1. 基本定义 MSP(…

如何通过提示词更好地利用AI

如何通过提示词工程释放AI的全部潜力:7个深度优化技巧 前言:为什么提示词决定AI的输出质量? 在人工智能对话系统的使用中,提示词(Prompt)就像开启宝藏的密码钥匙。研究表明,优化后的提示词可使…

Spring MVC框架二:创建第一个MVC程序

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 有两种方式 利用配置 1、利用IDEA新建一个Maven项目&#xff0c;添加一个web支持 2、导入常用的依赖 <dependencies><dependency><groupId>junit&…

鸿蒙ArkTs如何实现pdf预览功能?

鸿蒙ArkTs如何实现pdf预览功能&#xff1f; 前言PDFKit运行示例代码报错真机运行先看效果一、预览本地pdf文件二、预览线上的pdf文件三、预览沙箱目录中pdf的文件(重点)效果中的整体代码总结 Harmony OS NEXT版本&#xff08;接口及解决方案兼容API12版本或以上版本) 前言 在开…

Project Reactor中 map、flatMap、concatMap 和 flatMapSequential 的区别

在 Project Reactor&#xff08;Reactive Streams 的实现库&#xff0c;常用于 Spring WebFlux&#xff09;中&#xff0c;map、flatMap、concatMap 和 flatMapSequential 是常用的操作符&#xff0c;但它们的功能和行为有显著区别。以下是它们的详细对比&#xff1a; 1. 功能对…

SOME/IP-SD -- 协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.2 S…

Para-Lane: 首个真实世界多车道数据集,目的评估自动驾驶系统中的新型视角合成能力。

2025-02-22&#xff0c;阿里巴巴集团菜鸟自动驾驶实验室和百度研究院共同创建了一个名为 Para-Lane 的真实世界多车道数据集。该数据集目的评估自动驾驶系统中的新型视角合成&#xff08;NVS&#xff09;能力&#xff0c;通过提供大量真实世界的数据&#xff0c;弥补了现有合成…

【大模型】Ubuntu下 fastgpt 的部署和使用

前言 本次安装的版本为 fastgpt:v4.8.8-fix2。 最新版本fastgpt:v4.8.20-fix2 问答时报错&#xff0c;本着跑通先使用起来&#xff0c;就没有死磕下去&#xff0c;后面bug解了再进行记录。   github连接&#xff1a;https://github.com/labring/FastGPT fastgpt 安装说明&…