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

【系统架构】架构风格专题

目录

1、定义

2、通用架构风格分类

3、架构风格比较

4、示例:管道-过滤 VS 数据仓库)比较因素分析


1、定义

架构风格:描述某一特定应用领域系统组织方式惯用模式,反映了领域中众多系统所共有的结构语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。


2、通用架构风格分类

  • 数据流风格:批处理序列;管道-过滤器。
  • 调用-返回风格:主程序/子程序;面向对象风格;层次结构;客户端/服务器。
  • 独立构件风格:进程通信;事件系统。
  • 虚拟机风格:解释器;基于规则的系统。
  • 仓库风格:数据库系统;超文本系统;黑板系统。
架构风格定义代表
1. 数据流面向数据流,按照一定的顺序从前向后执行

批处理序列

管道-过滤器

2. 调用/返回构件之间存在显式互相调用关系,
在系统启动时加载已经在系统内编码,可直接运行。
容易实现并发处理和多任务。
树型结构,削弱了对计算的控制能力。

主程序/子程序

面向对象

层次结构

客户端/服务器

3. 独立构件独立构件之间无直接交互(不直接调用一个过程),而是触发/广播一个或多个事件,通过事件驱动的方式实现通信和协作。

进程通信

基于事件的隐式调用




4. 虚拟机

自定义规则:将业务逻辑中频繁变化的部分(用户级别、折扣规则、机器学习流程)定义为可动态改变的规则,通过灵活的自定义规则, 实现规则的重组

基于这个规则来开发构件,能够跨平台适配,业务逻辑随时改变,规则灵活定义、灵活组合。

解释器可以解释执行用户自定义的规则

解释器

基于规则的系统

5. 仓库以数据为中心,所有的操作都是围绕建立的数据中心进行的

数据库系统

超文本系统

黑板系统


3、架构风格比较

架构风格灵活性可扩展性性能应用

解释器

将用户级别、折扣规则定义为可动态改变的规则,通过灵活的自定义规则, 实现规则的重组

基于这个规则来开发构件,能够跨平台适配,业务逻辑随时改变,规则灵活定义、灵活组合。

解释器可以解释执行用户灵活自定义的规则(个性化折扣)。

折扣规则是独立的语法规则可动态改变,由解释器对变化的规则进行解析,修改更容易

加入新的用户级别和折扣规则时,通过定义新的规则实现可扩展性。

解释器是运行期动态绑定执行。

需要对用户级别与折扣规则进行实时解释,性能较差

规则集、规则解释器、选择器和工作内存,用于 DSS 和人工智能、专家系统。·

解释自定义的规则,解释引擎、存储区、数据结构。*


基于规则

面向对象
面向对象的实现相对固定,高度模块化,将用户级别、折扣规则等封装为对象,业务有变化需要修改具体的类/对象

业务逻辑有变化需要修改具体的类/对象

加入新的用户级别和折扣规则时,需要重新定义新的对象,并需要重启系统

在系统启动时加载,用户级别和折扣规则已经在系统内编码,可直接运行,性能较好对象是构件,通过对象调用封装的方法和属性。,


隐式调用

独立构件之间无直接交互、不直接调用一个过程,而是触发/广播一个或多个事件,通过事件驱动的方式实现通信和协作。

解耦构件之间的依赖关系,降低耦合度,提升灵活性。

支持构件的动态添加和移除。当系统需要新增功能时,可以通过添加监听器或订阅者的方式来扩展系统的功能。能够实现异步、非阻塞的事件处理

通过处理函数的并发调用,提高系统处理性能。性能较好

事件发布者将事件发布到事件总线上,事件订阅者可以异步处理这些事件,从而提高系统的并发性和性能。
1.根据用户的注册兴趣,向用户推送其感兴趣的新闻内容;
2.修改代码后,触发语法高亮、语法错误提示、代码格式化



管道-过滤器

流式数据结构,数据驱动机制,处理流程事先确定,顺序或有限循环的交互方式,交互性差

每个构件都有一组输入和输出,构件读取输入的数据流,经过内部处理产生输出数据流。

数据处理组件之间有依赖关系,前一个构件的输出作为后一个构件的输入,前后数据流关联,灵活性差。

数据与处理紧密关联,调整处理流程需要重新启动系统。

接口适配的扩展方法。

需要数据格式转换性能降低

支持过滤器并发调用,性能提高。

1. 数据输入某个构件,经过内部处理,产生数据输出。
2. 传统的编译器包括词法分析、语法分析、语义分析、代码生成等,每个阶段产生的结果作为下一个阶段的输入


仓库
数据存储在中央仓库处理流程独立,独立构件之间无直接交互,通过数据仓库间接交互

独立构件对中央数据进行操作,支持交互式处理。
数据与处理解耦合,可动态添加和删除处理组件。

独立构件与数据仓库进行数据适配
数据与处理分离,需要加载数据,性能降低。

数据处理组件之间一般无依赖关系,可并发调用,提高性能。
语音识别、知识推理等问题复杂、解空间很大、求解过程不确定的这一类软件系统,黑板、知识源、控制。“

4、示例:管道-过滤 VS 数据仓库)比较因素分析

比较因素管道-过滤器风格数据仓储风格
数据结构流式数据文件或模型
控制结构数据驱动业务功能驱动
交互方式顺序结构、有限循环结构独立构件之间无直接交互,通过数据仓库间接交互
数据处理数据驱动机制,处理流程事先确定,交互性差。数据存储在中央仓库处理流程独立,独立构件对中央数据进行操作,支持交互式处理。
可扩展性数据与处理紧密关联,调整处理流程需要重新启动系统。数据与处理解耦合,可动态添加和删除处理组件。
扩展方法接口适配与数据仓库进行数据适配
处理性能需要数据格式转换,性能降低。
 

支持过滤器并发调用,性能提高。

数据与处理分离,需要加载数据,性能降低。

数据处理组件之间一般无依赖关系,可并发调用,提高性能。

相关文章:

【系统架构】架构风格专题

目录 1、定义 2、通用架构风格分类 3、架构风格比较 4、示例:管道-过滤 VS 数据仓库)比较因素分析 1、定义 架构风格:描述某一特定应用领域中系统组织方式的惯用模式,反映了领域中众多系统所共有的结构和语义特性&#xff0c…...

【Qt】盒子布局、网格布局、表单布局和堆栈布局

盒子布局 QBoxLayout可以在水平方向或垂直方向上排列控件,分别派生了QHBoxLayout、QVBoxLayout子类。 QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。QVBoxLayout:垂直布局,在垂直…...

GO语言,半自动打怪

仅供学习参考,切勿用于商业用途 package mainimport ("fmt""github.com/go-vgo/robotgo""math/rand""time" )const (taskNum 7 )type Task struct {Name stringSleepTime1 intSleepTime2 intFunc func() }fu…...

【Java 进阶篇】Java登录案例详解

登录是Web应用程序中常见的功能,它允许用户提供凭证(通常是用户名和密码)以验证其身份。本文将详细介绍如何使用Java创建一个简单的登录功能,并解释登录的工作原理。我们将覆盖以下内容: 登录的基本概念创建一个简单的…...

Vue 菜单导航栏,轮播图

导航菜单栏结构和样式代码实现 一级导航栏 views/HomeView.vue <template><div><Shortcut></Shortcut><Header></Header><div class"inner"><Navigation></Navigation></div><div>我是主页&l…...

讲述为什么要学习Adobe XD以及 Adobe XD下载安装

首先 我们要了解 Adobe XD 是个什么东西 XD是Adobe公司专门开发出来面向交互、界面设计的矢量绘图工具。 然后是 他可以做什么&#xff1f; 最基本的 可以做UI界面设置 所有 手机 平板 电脑等设备的UI界面 我们都可以通过XD完成 还有就是原型设置 我们可以做各种界面图 还有…...

Netty复习:(1)Http server: hello world

一、加依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.72.Final</version></dependency>二、创建自定义的handler package cn.edu.tju.handler;import io.netty.buffer.ByteB…...

【Python 千题 —— 基础篇】加法计算

题目描述 题目描述 编写一个程序&#xff0c;接受用户输入的两个数字&#xff0c;然后计算这两个数字的和&#xff0c;并输出结果。 输入描述 输入两个数字&#xff0c;用回车隔开两个数字。 输出描述 程序将计算这两个数字的和&#xff0c;并输出结果。 示例 示例 ① …...

基于纵横交叉算法的无人机航迹规划-附代码

基于纵横交叉算法的无人机航迹规划 文章目录 基于纵横交叉算法的无人机航迹规划1.纵横交叉搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用纵横交叉算法来优化无人机航迹规划。 …...

D-Bus:数据类型

D-Bus中描述接口的属性和方法,有其自己定义的一套签名描述方式: 数据类型描述符号对应C++数据类型avector/array数组, ai表示的是vector<int32_t>bboolddouble双精度浮点数iint32_t,32位有符号整数nint16_t,16位有符号整数oobject_path对象路径quint16_t,16位无符号…...

BI零售数据分析,告别拖延症,及时掌握一线信息

在日常的零售数据分析中&#xff0c;经常会因为数据量太大&#xff0c;分析指标太多且计算组合多变而导致数据分析报表难产&#xff0c;零售运营决策被迫拖延症。随着BI数据可视化分析技术的发展&#xff0c;智能化、可视化、自助分析的BI数据分析逐渐成熟&#xff0c;形成一套…...

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…...

论文范文:论基于架构的软件设计方法及应用

注意:范文只适用于帮助大家打开写作思路,并不能作为素材直接用于平时练习、考试中。考试中直接使用范文的素材,会有被认定为雷同卷的风险。 摘要: 2022年4月,本人所在单位计划研发生态集装箱管理控制平台项目。该平台主要用于与现有公司生态集装箱产品做对接,达到远程控制…...

C语言 指针进阶笔记

p和*p: 如图&#xff0c;p是指针&#xff0c;指针存放着地址&#xff0c;打印出来应该是数组的值 *p是指针里里面的元素 #include<stdio.h> int main() {int a1;int b2;int c3;int p[3]{a,b,c};printf("%d",*p); return 0; } 那么现在的打印结果应该为数组的…...

数据库认证 | Oracle OCP好考吗

数据库对于很多技术人员来说都不陌生&#xff0c;但是你想深入了解的话&#xff0c;那么考个证书也许就是一个不错的选择。 如果能考个Oracle OCP认证的话&#xff0c;那也确实不错。那么Oracle OCP好考吗&#xff1f;下面我们就来了解一下吧。 01 Oracle OCP好考吗 OCP考试还…...

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

处理大数据的基础架构&#xff0c;OLTP和OLAP的区别&#xff0c;数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&am…...

解决计算机msvcp120.dll文件丢失的5种方法,亲测有效

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp120.dll丢失”。这个错误提示可能会给我们带来很大的困扰&#xff0c;影响我们的正常使用。本文将详细介绍msvcp120.dll丢失的原因、解决方法以及预防措施&#xff0c;帮助大家更好地…...

Python selenium交互

视频版教程&#xff1a;一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium selenium可以模拟用户点击事件&#xff0c;以及控制浏览器前进&#xff0c;后退等操作。 下面是一个模拟百度搜索&#xff0c;点击下一页&#xff0c;控制浏览器后退&#xff0c…...

基本微信小程序的体检预约小程序

项目介绍 我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;体检预约系统小程序被用户普遍使用&#xff0c;为方便用户…...

FHE 的高精度算术:BGV-big、BFV-big

参考文献&#xff1a; [NL11] Naehrig M, Lauter K, Vaikuntanathan V. Can homomorphic encryption be practical?[C]//Proceedings of the 3rd ACM workshop on Cloud computing security workshop. 2011: 113-124.[GC15] Geihs M, Cabarcas D. Efficient integer encoding…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...