【架构六】系统架构风格

一、数据流风格

  1. 批处理:每一步都是独立的,并且每一步都是顺序执行的,只有当前一步处理完毕后,后一步处理才开始。数据必须是完整的,作为一个整体进行传递。如日志分析、计费程序等。
  2. 管道/过滤器:每个构件都有一组输入输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。如传统的编译器、UNIX管道等。
    在这里插入图片描述

(数据流风格)批处理风格与管道过滤器风格的区别:
共同点:把任务分成一系列固定顺序的计算单元。组件间只通过数据交互传递。
区别:(1)批处理强调是全部的,输入时可随机存取,无合作性无交互性。而管道过滤器是递增的,有反馈,可交互。(2)批处理强调数据传送在步与步之间作为一个整体,而管道过滤器无此要求。批处理的数据是完整的,管道过滤器的数据是增量的(3)批处理数据以整体的形式传输,数据总量有限。管道过滤器用数据流的形式传输,数据量无限制。

二、调用/返回风格

  1. 主程序/子程序属于结构化设计,关注功能的实现,使用自顶向下的功能划分的设计方法。把问题分为若干步骤处理。构件即为主程序和子程序。系统中的每个构件都是一个函数或者过程,每个函数形成一个调用链。产生程序结构图。每个函数可修改全局数据。如开发语言。
  2. 面向对象体系关注数据与功能的封装,采用面向对象的设计方法。构件是对象,即抽象数据类型的实例,每个对象都包含数据和方法。各个对象通过相互调用的方式来实现,通过相互调用,实现整个系统的全部功能。没有可供修改的全局数据。产生设计类图。如面向对象开发语言。
  3. 层次架构风格:每层为上一层提供服务,修改某一层,最多影响其相邻的上下层(通常只能影响上层)。上层必须知道下层的身份,不能调整层次之间的顺序。如TCP/IP协议。
    4.在这里插入图片描述

三、独立构件风格

独立构件风格主要强调每个构件都是相对独立的个体,它们之间不直接通信,以降低耦合度,提高灵活性。构件之间相互独立,不存在显示的调用关系。

  1. 进程通信:进程间消息传递的方式可以是点对点、异步或同步方式,以及远程过程调用等。
  2. 事件驱动(隐式调用):当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。如断点调试、公众号等的订阅信息。

四、虚拟机风格

人构建一个运行环境,在这个环境上,可以解析与运行定义的一些语言增加架构的灵活性。

  1. 解释器适用于“自定义规则的场合”,无需人的介入,逐行逐字翻译执行。如JVM。
  2. 规则系统是在解释器的基础上增加经验规则,适用于专家系统,一个规则对应一个处理流程。一般用在人工智能领域和决策支持系统中。

五、仓库风格(数据共享风格)

以数据为中心,所有的操作都是围绕建立的数据中心进行的。数据库系统和黑板系统共同点是共享数据。若输入流中某类事件触发系统相应的进程执行,则仓库是传统型数据库。
若中央数据结构的当前状态触发系统相应的进程执行,则仓库是黑板系统。数据库系统是构件控制中央共享流程,而黑板系统是构件被动响应中央共享数据的变化。黑板系统包括知识源、黑板和控制三个部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源之间不直接通信,他们之间的交互通过黑板来完成,知识源响应黑板的变化,也只修改黑板;黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介,知识源通过不断地改变黑板数据来解决问题;控制:控制完全由黑板的状态驱动,知识源响应是通过黑板的状态变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中。如语音识别,信号处理

六、闭环风格(过程控制)

闭环风格(过程控制):适用于嵌入式系统,用于解决简单闭环控制问题,如空调温控、定速巡航。

各架构风格的优缺点:

  1. 管道/过滤器风格
    优点
    模块化:系统可以被拆分成多个独立的组件,易于开发和维护。
    可重用性:过滤器可以在不同的管道中重复使用,提高代码的可重用性。
    可扩展性:可以通过添加新的过滤器来扩展系统的功能。
    缺点
    过多的过滤器可能导致性能下降,增加系统的复杂性。
    数据流在过滤器之间传递,可能导致数据转换和传输的开销。

  2. 面向对象风格
    优点
    模块化:系统可以被组织成多个对象,易于理解、扩展和维护。
    可重用性:面向对象的设计鼓励代码的重用,通过继承和多态性实现代码的灵活性和可扩展性。
    封装性:对象可以封装数据和功能,提供更好的安全性和抽象性。
    缺点:
    复杂性:面向对象的设计可能导致较高的复杂性,特别是对于大型系统。
    性能开销:面向对象的设计可能引入一些额外的性能开销,如动态绑定和消息传递。

  3. 事件驱动风格
    优点
    松耦合:组件之间通过事件进行通信,彼此之间解耦,易于维护和扩展。
    响应性:系统可以及时响应事件,适用于实时和交互式应用。
    并发性:事件驱动的系统可以支持并发处理多个事件。
    缺点
    (1)构件放弃了对计算的控制权,完全由系统来决定
    (2)存在数据传输问题

  4. 分层体系结构风格
    优点
    模块化:系统按层次结构组织,易于理解和维护。
    可重用性:每个层级可以独立开发和测试,提高代码的可重用性。
    松耦合:各个层级之间通过定义明确定义的接口进行通信,实现松耦合的架构。
    可扩展性:分层架构允许在需要扩展系统功能或引入新的技术时,只需对特定的层进行修改或扩展,而无需对整个系统进行重构。这种可扩展性使得系统能够适应变化的需求和技术演进。
    缺点
    性能损失:分层架构可能引入一定的性能损失,因为在不同层之间可能需要进行额外的数据传递和转换。这种开销在某些性能敏感的系统中可能会成为限制因素。
    增加复杂性:分层架构引入了多个层次和层间的依赖关系,增加了系统的复杂性和理解难度。在设计和维护分层架构时,需要仔细考虑和管理各个层次之间的交互和依赖关系。
    跨层调试困难:当系统出现问题时,跨越多个层次进行调试可能会比较困难。因为问题可能涉及多个层次之间的交互和数据流,需要进行跨层的追踪和排查。

  5. C2体系结构风格
    优点
    分布式:C2体系结构支持分布式部署,可以在多个计算节点上运行不同的组件。
    可伸缩性:可以通过添加更多的计算节点来扩展系统的处理能力。
    高可用性:C2体系结构具有冗余和容错机制,提高系统的可靠性和可用性。
    缺点
    复杂性:C2体系结构的设计和实现比较复杂,需要考虑分布式通信、一致性和容错等方面。
    开发和调试困难:分布式系统的开发和调试相对更加复杂,需要处理网络

  6. 仓库风格
    优点
    数据中心:集中式数据仓库提供了数据的一致性和可管理性。
    数据共享:多个组件可以共享数据仓库中的数据,提高数据的可访问性和共享性。
    缺点
    性能瓶颈:集中式数据仓库可能成为系统的性能瓶颈,特别是在高并发场景下。
    数据一致性:多个组件同时对数据仓库进行操作可能导致数据一致性问题。

  7. 解释器风格:
    优点
    灵活性:解释器风格允许在运行时解释和执行代码,提供了系统的灵活性和动态性。
    可扩展性:可以通过添加新的解释器或修改现有解释器来扩展系统的行为。
    缺点
    性能开销:解释器的执行通常比编译后的代码执行更慢,因为需要解析和解释每一条指令。
    复杂性:解释器的设计和实现可能比较复杂,需要处理语法解析、语义解释等方面的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

50-服务编排(下):基于Helm的服务编排部署实战

制作IAM Chart包 我们假设IAM项目源码根目录为${IAM_ROOT},进入 ${IAM_ROOT}/deployments目录,在该目录下创建Chart包。具体创建流程分为四个步骤, 第一步,创建一个模板Chart。 Chart是一个组织在文件目录中的集合,…

【汇编语言实战】已知10个整数求最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{11,33,23,54,12,51,2,4,34,45};int maxa[0];for(int i1;i<9;i){if(a[i]>max){maxa[i];}}printf("%d",max); }汇编语言&#xff1a; include irvine32.inc .data arr dword 11…

深入了解Redis——持久化

一&#xff0c;Redis持久化 Redis持久化即将内存中的数据持久化到磁盘中&#xff0c;在下一次重启后还能进行使用&#xff0c;Redis持久化分为RDB和AOF两种&#xff0c;我们接下来分别介绍RDB和AOF的内部原理和区别 RDB Redis运行时会将当前的内存快照存入至磁盘中&#xff…

c++ 字符串与STL用法

文章目录 StringVector构造增加删除大小清空排序 map定义添加数据遍历数据查找清空删除长度判断空交换排序常用用法 String Vector vector是动态扩充的数组 构造 ​ vector()​:创建一个空vectorvector(int nSize)​:创建一个vector,元素个数为nSize​vector(int nSize,co…

【MATLAB】基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据(附代码)

基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据 WiFi指纹匹配是室内定位最为基础和常见的研究&#xff0c;但是WiFi指纹的采集可以称得上是labor-intensive和time-consuming。现在&#xff0c;给大家分享一下我们课题组之前在做WiFi指纹定位时的基于射线跟踪技术仿真WiFi…

Josephus排列:组合数学与跨学科应用

Josephus排列&#xff1a;组合数学与跨学科应用 一、背景二、定义和历史三、问题的形式化描述四、解决方案4.1 n2&#xff0c;任意m4.2 m1&#xff0c;任意n4.3 n为奇数&#xff0c;m为偶数4.4 n和m都是奇数 五、红黑树简介六、Josephus排列问题描述七、使用红黑树解决Josephus…

设计模式之备忘录模式(上)

备忘录模式 1&#xff09;概述 1.定义 在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;可以在以后将对象恢复到原先保存的状态。 2.作用 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便…

展厅设计方案需要考虑哪些因素环节

1、整体展厅规划 整体规划是展厅搭建中需要优先考虑的环节&#xff0c;必须为搭建成本和效果提供坚实的基础。需确定整体展厅面积、展厅的使用目的、产品布局以及进入展厅的路线、确定展厅的整体框架之后&#xff0c;还需考虑展品种类、产生的呈现效果&#xff0c;这些都将影响…

el-table动态合并列

需要合并列&#xff0c;并且不确定需要合并多少列的&#xff0c;可以参照如下代码 首先需要再el-table上传入span-method方法 arraySpan({ row, column, rowIndex, columnIndex }){if (row.groupName 汇总 && columnIndex 0) {return [0,0]} else if (row.groupName…

迷宫 — — 蓝桥杯(动态规划)

迷宫 题目&#xff1a; 输入样例&#xff1a; 3 1 1 1 2 3 4 5 6 7 8 9 2 2 1 3 1 R输出样例&#xff1a; 21思路&#xff1a; 题目大意&#xff1a;给定一个n x m的平面网格&#xff0c;并且每一个格子都有一定的代价&#xff0c;并且设有障碍物和陷阱&#xff0c;障碍物的意…

win11 连接海康摄像头 ONVif协议

目录 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 海康摄像头设置支持onvif协议 安装onvif协议 onvif协议示例代码 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 第一步、桌面右键新建一个 txt 的文档 第二步、打开文档并且复制粘贴下面代码 CreateObject(&…

【科研】搜索文献的网站

文章目录 paperswithcode【最新论文&#xff0c;代码】huggingface【大语言模型&#xff0c;最新论文】dblp【关键词搜索】arxiv【最新文章】semanticscholar【相关引用查询】connectedpapers【相关引用查询】github【工程&#xff0c;代码&#xff0c;论文开源代码】 paperswi…

OV证书为什么更可信

在网络安全领域&#xff0c;SSL/TLS证书扮演着至关重要的角色&#xff0c;其中组织验证&#xff08;Organization Validation&#xff0c;简称OV&#xff09;证书以其深度验证机制和高度可信性脱颖而出。 OV证书为何更值得信赖&#xff0c;关键在于其严格的验证流程。 首先&am…

金三银四面试题(十九):MySQL中的锁

在MySQL中&#xff0c;锁是非常重要的&#xff0c;特别是在多用户并发访问数据库的环境中&#xff0c;因此也是面试中常问的话题。 请说说数据库的锁&#xff1f; 关于MySQL 的锁机制&#xff0c;可能会问很多问题&#xff0c;不过这也得看面试官在这方面的知识储备。 MySQL …

东方博宜 1169. 编程输入10个正整数,然后自动按从大到小的顺序输出

东方博宜 1169. 编程输入10个正整数&#xff0c;然后自动按从大到小的顺序输出 学了sort函数的新用法。 从小到大排列 sort(a , an ) 从大到小排列 sort(a , an , greater() ) #include<iostream> #include<algorithm> using namespace std; int main() {int a[…

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式&#xff08;Visitor Pattern&#xff09;1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派&#xff08;多态&am…

新型[datahelper@onionmail.org].datah 勒索病毒来袭:如何筑起安全防线?

在数字化时代&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒成为了一种非常严重的威胁。[datahelperonionmail.org].datah勒索病毒就是其中的佼佼者&#xff0c;它以其复杂的加密手段和恶劣的勒索行为&#xff0c;给用户带来了巨大的损失。本文将从病毒的运行机制、…

systemctl start docker报错(code=exited, status=1/FAILURE)

运行systemctl start docker报错内容如下: 输入systemctl status docker.service显示以下内容&#xff1a; 本次启动不起来与docker服务无关 具体解决问题是修改 /etc/docker/daemon.json&#xff0c;vim /etc/docker/daemon.json # 添加如下内容 {"registry-mirrors&qu…

Win10安装sqlplus遇到报错的解决办法

1.下载安装sqlplus.exe的错误解决过程 最近有用到sqlplus连接Oracle数据库执行自动化脚本&#xff0c;Orcle服务器版本是11.2.0.1。在Navicat工具上通过如下语句查询到的版本信息截图如图1所示&#xff1a; SELECT * FROM v$version; 图1 Oracle服务器版本信息 其中“Oracle Da…

图像分割-RSPrompter

文章目录 前言1. 自动化提示器1.1 多尺度特征增强器1.2 RSPrompterAnchor-based PrompterQuery-based Prompter 2. SAM的扩展3. 结果WHU数据集NWPU数据集SSDD数据集 前言 《RSPrompter: Learning to prompt for remote sensing instance segmentation based on visual foundati…