【架构-19】架构风格比较

news/2024/7/22 14:04:00/文章来源:https://blog.csdn.net/qq_45611002/article/details/139121748

在这里插入图片描述

独立构件风格(Independent Components):

适用场景:需要灵活扩展和组合的复杂大数据应用

特点:
高度解耦:各组件之间高度独立,可单独开发和部署
灵活性和可扩展性:易于根据需求添加或替换组件
复杂度高:需要管理多个独立的组件及其交互
通信开销:组件间需要通过网络通信,可能会有性能开销

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

数据流风格(Data Flow):

适用场景:实时数据处理和流式计算场景

特点:
数据驱动:以数据流为中心组织系统
并行处理:数据可以在不同组件间并行流转和处理
实时性:适合处理实时数据流,低延迟
容错性:单个组件失败不会影响整体

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

调用返回风格(Pipe and Filter):

适用场景:需要灵活组合和复用处理组件的应用

特点:
组件解耦:各处理组件独立,松散耦合
可重用性:各组件可独立重用于其他应用
可配置性:可灵活配置组件顺序和数据流
延迟问题:需要在组件间传递数据,可能会有延迟

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

虚拟机风格(Virtual Machine):

适用场景:需要资源隔离和弹性伸缩的大数据应用

特点:
隔离性:基于虚拟机的沙箱环境,隔离计算资源
可移植性:可在不同硬件平台上运行
扩展性:可根据需求动态扩展计算资源
管理复杂:需要管理虚拟机映像和资源调度

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

数据共享风格(Data Shared):

适用场景:需要多个组件共享和协作处理同一批数据的应用

特点:
数据中心化:数据集中存储和共享
一致性和完整性:有利于保证数据的一致性和完整性
访问开销:需要通过网络访问共享数据,可能会有性能开销
单点瓶颈:共享存储可能成为系统瓶颈

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

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

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

相关文章

深入探索C++继承机制:从概念到实践的全面指南

目录 继承的概念及定义 继承的概念 继承的定义 定义格式 继承方式和访问限定符 继承基类成员访问方式的变化 默认继承方式 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 继承的方式 菱形虚拟继承 菱形虚拟继承原理 继承…

超详细的前后端实战项目(Spring系列加上vue3)前端篇+后端篇(三)(一步步实现+源码)

好了,兄弟们,继昨天的项目之后,开始继续敲前端代码,完成前端部分(今天应该能把前端大概完成开启后端部分了) 昨天补充了一下登录界面加上了文章管理界面和用户个人中心界面 完善用户个人中心界面 修改一…

华为设备WLAN配置之AP上线

WLAN基础配置之AP上线 配置WLAN无线网络的第一阶段,AP上线技术: 实验目标:使得AP能够获得来自AC的DHCP地址服务的地址,且是该网段地址池中的IP。 实验步骤: 1.把AC当作三层交换机配置虚拟网关 sys Enter system view,…

halcon SVM 缺陷检测分类

一、概述 训练数据 二、算子解释 compactness Halcon 算子 compactness_halcon compactness-CSDN博客 *计算输入区域的紧凑度 compactness (Region, Compactness) 原理解释 convexity 每个输入区域的凸度 Halcon 算子 convexity_halcon convexity-CSDN博客 *计算每个输…

Unity LayerMask避坑笔记

今天使用Physics2D.OverlapAreaNonAlloc进行物理检测时候,通过LayerMask.NameToLayer传入了int值的LayerMask,结果一直识别不到,经过Debug才找到问题,竟是LayerMask的“值”传输有问题,记录一下。 直接贴代码输出结果&…

《SpringBoot》系列文章目录

SpringBoot是由Pivotal团队提供的全新框架,旨在简化新Spring应用的初始搭建以及开发过程。以下是一些关于SpringBoot的详细介绍: 设计目的:SpringBoot通过特定的方式来进行配置,使得开发人员不再需要定义样板化的配置&#xff0c…

HNU-计算机体系结构-实验1-RISC-V流水线

计算机体系结构 实验1 计科210X 甘晴void 202108010XXX 1 实验目的 参考提供为了更好的理解RISC-V,通过学习RV32I Core的设计图,理解每条指令的数据流和控制信号,为之后指令流水线及乱序发射实验打下基础。 参考资料: RISC-…

【引领光子学革命:机器学习与深度学习重塑设计与应用新纪元】

光子器件的逆向设计:利用深度学习技术,可以优化多参数光子器件的设计。通过大量的数据分析和模式识别,深度学习算法能够预测和优化光子器件的性能,从而缩短设计周期并降低设计成本。 超构表面与超材料设计:在新型光学材…

浅谈金融行业数据安全分类分级

数据安全管理是一项从上而下的、多方配合开展的工作。在进行数据安全管理组织架构建设时,需要从上而下建设;从而全面推动数据安全管理工作的执行和落地;以保证数据安全的合法合规、并长效推动业务的发展和稳定运行。 金融行业机构应设立数据…

Hexo博客部署到云服务器

1、本地搭建hexo 本地搭建hexo过程详见hexo官网,步骤比较详细,按照步骤搭建即可 2、hexo主题 我使用的Butterfly主题,主题配置请查看Butterfly安装文档 3、部署到云服务器 3.1、服务器环境 nginx 搭建 使用云服务商提供的远程登陆登录进…

vscode远程登录阿里云服务器【使用密钥方式--后期无需再进行密码登录】【外包需要密码】

1:windows主机上生成【私钥】【公钥】 1.1生成公钥时不设置额外密码 1.2生成公钥时设置额外密码【给外包人员使用的方法】 2:在linux服务器中添加【公钥】 3:本地vscode连接linux服务器的配置 操作流程如下 1.1本地终端中【生成免密登录…

《TCP/IP网络编程》(第十一章)进程间通信

进程间通信意味着两个不同的进程间可以交换数据,它使得不同的进程能够协同工作,实现复杂的系统功能。 1.通过管道实现进程间通信 下图是基于 管道(PIPE) 的进程间通信结构模型 管道不属于进程的资源,属于操作系统的资…

[UE5]安卓调用外置摄像头拍照(之显示画面)

目录 部分参考文献(有些有用的我没标,没放上来) 要点 总蓝图 结果 部分参考文献(有些有用的我没标,没放上来) 【UE】获取USB摄像头画面_虚幻捕获硬件摄像头-CSDN博客 UE4安卓调用摄像头拍照确保打…

【移除链表元素】python

目录 题目: 方法: 知识: 代码: 题目: 方法: 在头节点前增加一个虚拟头节点 知识: 链表中的每一个节点只包含当前值val和指向下一个next 代码: class Solution:def removeEle…

【Linux进程篇】Linux内核——程序地址空间的初构

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 程序地址空间回顾 我们在讲C语言的时候&#xff0c;大家应该都见过这样的空间布局图&#xff1a; 为了更好的验证不同的数据在内存中的存储位置&#xff0c;下面这段代码我们可以去实验一下&#xff1a; #include<…

ChatGPT:轻松搞定论文润色,让语言更流畅

GPT从3.5一路升级到4.0&#xff0c;不仅在国外火得一塌糊涂&#xff0c;还悄悄地在我们论文润色的世界里掀起了一场革命。 首先&#xff0c;得承认&#xff0c;虽然这玩意儿是“洋货”&#xff0c;用起来可能得费点脑筋——注册个账号啦&#xff0c;买个会员啦之类的。但它对我…

SQL数据库多层嵌套 json转sql建表语句,SQL数据库里数组里对象数据怎么创建

1. uniapp sqlite 一个数组包含对象嵌套对象通过主外键方式插入数据库&#xff1a; // 假设有一个对象数组&#xff0c;对象中包含嵌套对象 const objectsArray [{parentObject: {id: 1,name: Parent 1,// 其他父对象属性},childObject: {id: 11,parentId: 1,name: Child 1 o…

Python: 使用pyotp实现OTP一次性密码验证

使用pyotp实现OTP一次性密码验证 OTP的基本原理 生成一个共享秘钥作为随机数的种子服务端通过种子计算出当前的密码客户端也通过相同的种子计算出当前的密码验证客户端生成的密码和服务端生成的密码是否匹配 服务端和客户端计算的方式一样 共享密钥 时间因子 算法 > 密…

Numba 的 CUDA 示例(1/4):踏上并行之旅

按照本系列从头开始使用 Python 学习 CUDA 编程 介绍 GPU&#xff08;图形处理单元&#xff09;&#xff0c;顾名思义&#xff0c;最初是为计算机图形学开发的。从那时起&#xff0c;它们几乎在每个需要高计算吞吐量的领域都无处不在。这一进步得益于 GPGPU&#xff08;通用 G…

关于微信小程序低功耗蓝牙ECharts实时刷新(涉及自定义缓冲区)

简单的蓝牙显示&#xff08;串口手动发数据测试&#xff09; 最近搞了这方面的东西&#xff0c;是刚刚开始接触微信小程序&#xff0c;因为是刚刚开始接触蓝牙设备&#xff0c;所以这篇文章适合既不熟悉小程序&#xff0c;又不熟悉蓝牙的新手看。 项目要求是获取到蓝牙传输过来…