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

目录

1、定义

2、通用架构风格分类

3、架构风格比较

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


1、定义

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


2、通用架构风格分类

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

批处理序列

管道-过滤器

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

主程序/子程序

面向对象

层次结构

客户端/服务器

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

进程通信

基于事件的隐式调用




4. 虚拟机

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

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

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

解释器

基于规则的系统

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

数据库系统

超文本系统

黑板系统


3、架构风格比较

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

解释器

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

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

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

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

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

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

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

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

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


基于规则

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

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

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

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


隐式调用

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

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

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

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

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



管道-过滤器

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

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

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

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

接口适配的扩展方法。

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

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

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


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

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

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++设计模式三:工厂模式

本文通过一个例子简单介绍简单工厂模式、工厂模式和抽象工厂模式。 1.简单工厂(静态) 假如我想换个手机,换什么手机呢?可以考虑苹果或者华为手机,那我们用简单工厂模式来实现这个功能: 我们关注的产品是手…

Lambda表达式与“::“方法引用 判空包装类Optional

函数式接口 函数式接口(Functional Interface)就是有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为Lambda表达式。 Lambda表达式与"::"方法引用 方法引用主要是对Lambda表达式的一种优化&…

Scrum团队中的人

人永远是第一位的。 Scrum团队里有一个Scrum master、一个Product owner和若干个Developer。人数大概在10人左右,甚至更少。千万别在Scrum团队再搞什么小组,scrum团队就是最原子的团队了。我见过有些不专业的12人的scrum团队里,还安插了几个…

ubuntu部署个人网盘nextCloud使用docker-compose方式

概述 当下各大网盘的容量都是有限制的,而且xx云不开会员网速就拉跨。 所以就想搭建一个自己的盘,并且可以控制用户的权限分组; nextCloud就很合适 我这边都是自己用偶尔给其他人使用下,所以直接docker部署了。 ubuntu版本&…

Stream流基础使用

目录 Stream出现时间: 作用: 什么是 Stream? 生成流 forEach map filter limit

【2023.10.30练习】C语言-循环右移字符

计算机能力挑战初赛2020.19题 题目描述: 现要对一个由字符a-z和A-Z组成的字符串进行解密,已知加密规则是: 字符串中所有字符分别在大写或小写的字母表中被循环左移5位(fGh-->aBc), 输入:一个加密过的字符串&#…

3.6每日一题(线性方程求通解)

1、判断类型选择方法:发现以y为未知函数,以x为自变量,不符合我们学过的类型 2、此时有两种方法: (1)x 与 y 对调,此时 x 为未知函数,y 为自变量 (2)变量代换…

10.27~10.29数电第三次实验分析与问题

实验要求 分析 寄存器 D触发器有两个输出口,一个输入口,一个时钟信号,一个复位信号 同步异步就是说复位信号在不在always里 给它加一个load就成了一位寄存器, 寄存器堆 8个8位的寄存器堆,每个寄存器都有两读一写…

GBase8a SSL 配置

GBase8a SSL 配置 GBase8a MPP Cluster 支持 SSL 标准协议, SSL 协议是一种安全性更高的协议标准, 它加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。 配置客户端使用 SSL 安全连接的方式连…

计算机网络 期末复习方向

一,网络层 前三章我们解决了在具体物理网络,具体局域网上数据的传输过程,我们能实现在一个具体网络上把数据从A主机传到B主机,这件事情解决了。 引入问题:如果网络的局域网不考虑网络的扩展问题之后,我们…

【Leetcode】【简单】13. 罗马数字转整数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/roman-to-integer/description/ …

在win10下,使用torchviz对深度学习网络模型进行可视化

目录 1. 安装 graphviz 和 torchviz 2.安装 graphviz.exe 3.实例测试 4.如果你的电脑还是无法画图,并且出现了下面的报错: 5.参考文章: 1. 安装 graphviz 和 torchviz 首先打开 Anaconda prompt 进入自己的 pytorch 环境(图中 pt 是我自…

servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header

目录 1、cookie和Session以及Header知识点 2、设置/获取 Cookie 3、设置/获取Session 4、设置/获取Header Cookie —— 客户端机制 Session —— 服务端机制 本篇博客主在用servlet和SpringBoot两种方式分别获取Session和Cookie,用来比较记忆与分析 1、cookie和…

MSQL系列(十二) Mysql实战-为什么索引要建立在被驱动表上

Mysql实战-left/right/inner join 使用详解 前面我们讲解了BTree的索引结构,也详细讲解下 left Join的底层驱动表 选择原理,那么今天我们来实战一下 left join,right join,inner join 等sql命令,看看到底如何用以及如…

Leetcode周赛369补题(3 / 3)

目录 1、找出数组的K-or值 - 位运算 模拟 2、数组的最小相等和 - 分情况讨论 3、使数组变美的最小增量运算数 - 动态规划dp 1、找出数组的K-or值 - 位运算 模拟 100111. 找出数组中的 K-or 值 思路: 根据范围,我们可以枚举0~30位,然后在…

【.net core】yisha框架bootstrapTreeTable组件实现行点击事件

YiSha.Web\YiSha.Admin.Web\wwwroot\lib\bootstrap.treetable\1.0\bootstrap-treetable.js文件中替换注册行点击选中事件代码 // 注册行点击选中事件var registerRowClickEvent function () {target.find("tbody").find("tr").unbind();target.find(&quo…

数据库软考知识

分布式数据库透明性 封锁 加上共享锁之后只能加共享锁,加上排他锁之后,啥锁都不能加。 分布式数据库特性 伪传递定理 SQL函数定义,有点冷 来了奥,更冷 存储过程 很重要,下午第二大题也是数据库

Java精品项目源码爱心捐赠平台网站(编号V65)

Java精品项目源码扶农助农平台建设系统(编号V64) 大家好,小辰今天给大家介绍一个爱心捐赠平台网站(编号V65),演示视频公众号(小辰哥的Java)对号查询观看即可 文章目录 Java精品项目源码扶农助农平台建设系统(编号V64)难度指数&a…

【Apache Flink】实现有状态函数

文章目录 在RuntimeContext 中声明键值分区状态通过ListCheckPonitend 接口实现算子列表状态使用CheckpointedFunction接口接收检查点完成通知参考文档 在RuntimeContext 中声明键值分区状态 Flink为键值分区状态(Keyed State)提供了几种不同的原语&…

【洛谷 P1106】删数问题 题解(贪心+字符串)

删数问题 题目描述 键盘输入一个高精度的正整数 N N N(不超过 250 250 250 位),去掉其中任意 k k k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N N N 和 k k k,寻找一种方案使得剩下的数字组成…