【系统架构】架构风格专题
目录
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、定义 架构风格:描述某一特定应用领域中系统组织方式的惯用模式,反映了领域中众多系统所共有的结构和语义特性,…...
【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公司专门开发出来面向交互、界面设计的矢量绘图工具。 然后是 他可以做什么? 最基本的 可以做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 千题 —— 基础篇】加法计算
题目描述 题目描述 编写一个程序,接受用户输入的两个数字,然后计算这两个数字的和,并输出结果。 输入描述 输入两个数字,用回车隔开两个数字。 输出描述 程序将计算这两个数字的和,并输出结果。 示例 示例 ① …...
基于纵横交叉算法的无人机航迹规划-附代码
基于纵横交叉算法的无人机航迹规划 文章目录 基于纵横交叉算法的无人机航迹规划1.纵横交叉搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用纵横交叉算法来优化无人机航迹规划。 …...
D-Bus:数据类型
D-Bus中描述接口的属性和方法,有其自己定义的一套签名描述方式: 数据类型描述符号对应C++数据类型avector/array数组, ai表示的是vector<int32_t>bboolddouble双精度浮点数iint32_t,32位有符号整数nint16_t,16位有符号整数oobject_path对象路径quint16_t,16位无符号…...
BI零售数据分析,告别拖延症,及时掌握一线信息
在日常的零售数据分析中,经常会因为数据量太大,分析指标太多且计算组合多变而导致数据分析报表难产,零售运营决策被迫拖延症。随着BI数据可视化分析技术的发展,智能化、可视化、自助分析的BI数据分析逐渐成熟,形成一套…...
[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: 如图,p是指针,指针存放着地址,打印出来应该是数组的值 *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好考吗
数据库对于很多技术人员来说都不陌生,但是你想深入了解的话,那么考个证书也许就是一个不错的选择。 如果能考个Oracle OCP认证的话,那也确实不错。那么Oracle OCP好考吗?下面我们就来了解一下吧。 01 Oracle OCP好考吗 OCP考试还…...
处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术
处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话&am…...
解决计算机msvcp120.dll文件丢失的5种方法,亲测有效
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。这个错误提示可能会给我们带来很大的困扰,影响我们的正常使用。本文将详细介绍msvcp120.dll丢失的原因、解决方法以及预防措施,帮助大家更好地…...
Python selenium交互
视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium selenium可以模拟用户点击事件,以及控制浏览器前进,后退等操作。 下面是一个模拟百度搜索,点击下一页,控制浏览器后退,…...
基本微信小程序的体检预约小程序
项目介绍 我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,体检预约系统小程序被用户普遍使用,为方便用户…...
FHE 的高精度算术:BGV-big、BFV-big
参考文献: [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…...
六、Ext系列文件系统(2)
...
别再只盯着VGA线了!手把手教你用示波器看懂RGBHV时序图(附绿同步电路分析)
数字示波器实战:解码RGBHV信号与绿同步电路设计全指南 在复古游戏机改造、CRT显示器维修或视频转换板设计的场景中,RGBHV信号的理解与测量往往是硬件工程师和电子爱好者面临的第一道技术门槛。不同于现代数字接口的标准化协议,模拟视频信号时…...
FanControl中文设置终极指南:3个简单步骤让Windows风扇控制说中文
FanControl中文设置终极指南:3个简单步骤让Windows风扇控制说中文 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_…...
基于 JTT1078MediaServer 的集群方案实践(Nginx + 溯源模式)轻量级车联网音视频集群
基于JTT1078MediaServer的集群方案实践(Nginx溯源模式)轻量级车联网音视频集群 在车联网JT/T1078音视频平台开发与部署中,单机JTT1078MediaServer在设备量少、并发低时可稳定运行,但随着接入设备增多、多路视频同时播放࿰…...
Excel数据同步ERP/CRM太麻烦?一个Python脚本搞定多系统自动填充(基于GoBot)
Excel数据同步ERP/CRM太麻烦?一个Python脚本搞定多系统自动填充(基于GoBot) 每次月底看着财务同事在ERP系统里逐条录入Excel数据,市场部同事又在CRM里重复同样的操作,这种低效场景你一定不陌生。数据在不同系统间的孤岛…...
自然语言编写嵌入式软件之点亮LED灯
要实现的功能: 控制LED以10HZ的频率闪烁 传统实现过程:学C语言,看数据手册了解MCU,学教程,copy代码,学编译调试环境,学仿真,学用仪器测量 自然语言编程实现过程: 搭建…...
构建AI助手持久记忆系统:Rekall项目实践与MCP协议应用
1. 项目概述:为你的AI助手构建一个“第二大脑”如果你和我一样,日常重度依赖 Claude Code、Cursor 这类AI编程助手,那你一定遇到过这个痛点:每次开启一个新的会话,AI助手就像得了“健忘症”,对之前讨论过的…...
使用curl命令直接调试Taotoken大模型聊天接口的详细步骤
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用curl命令直接调试Taotoken大模型聊天接口的详细步骤 对于需要在底层进行调试、验证或是在无特定SDK环境中工作的开发者而言&am…...
ctf show web 入门46
这道题目是上一题的升级版,过滤条件变得更加苛刻了。我们来分析一下新增的限制以及应对方案。 代码审计与变化 相比之前,正则过滤 preg_match 新增了以下内容: [0-9]:禁止使用任何数字。这意味着 $IFS$9 这种绕过方式失效了。 \$&…...
RAD-NeRF:面向实时人像合成的神经辐射场高效架构
1. 项目概述:当NeRF遇上实时人像,RAD-NeRF到底在解决什么问题?我第一次看到“Efficient NeRFs for Real-Time Portrait Synthesis (RAD-NeRF)”这个标题时,手边正调试一个跑在RTX 4090上的标准NeRF模型——单帧渲染耗时23秒&#…...
