系统架构设计师—系统架构设计篇—软件架构风格
文章目录
- 概述
- 经典体系结构风格
- 数据流风格
- 批处理
- 管道过滤器
- 对比
- 调用/返回风格
- 主程序/子程序
- 面向对象架构风格
- 层次架构风格
- 独立构件风格
- 进程通信
- 事件驱动的系统
- 虚拟机风格
- 解释器
- 基于规则的系统
- 仓库风格(数据共享风格)
- 数据库系统
- 黑板系统
- 超文本系统
- 闭环控制风格
- C2风格
- 二层C/S架构风格
- 三层C/S架构风格
- B/S架构
概述
软件体系结构(架构)风格是描述某一特定应用领域中系统组织方式的惯用模式。
体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。
- 词汇表:包含一些构件和连接件类型。
- 约束:指出系统是如何将这些构件和连接件组合起来的。
体系结构风格反应了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
经典体系结构风格
- 数据流风格
- 批处理
- 管道过滤器
- 调用/返回风格
- 主程序/子程序
- 面向对象风格
- 层次结构风格
- 独立构件风格
- 进程通信
- 事件驱动的系统
- 虚拟机风格
- 解释器
- 基于规则的系统
- 仓库风格(数据共享风格)
- 数据库系统
- 黑板系统
- 超文本系统
- 闭环控制风格
- C2风格
数据流风格
批处理
- 每一步处理都是独立的,并且每一步是顺序执行的。
- 只有当前一步处理完成,后一步才能开始处理。
- 数据必须是完整的,以整体的方式传递。
- 如:日志分析、计费程序、数据仓库等。
管道过滤器
- 每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
- 这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。
- 如传统的编译期、UNIX管道等。
对比
| 批处理 | 管道过滤器 |
|---|---|
| 整体数据传送 | 增量数据传送 |
| 构件粒度大 | 构件粒度小 |
| 延迟高、实时性差 | 实时性好 |
| 无并发 | 可并发 |
调用/返回风格
主程序/子程序
- 一般采用单线程控制。
- 把问题划分成若干处理步骤,主程序的正确性取决于他调用的子程序的正确性。
- 如开发语言。
面向对象架构风格
- 数据的标识鄂它们的相应操作被封装起来,对象的行为体现在其接受和请求的动作中。
- 对象具有封装性,一个对象的改变不会影响其他对象。
- 如面向对象开发语言。
层次架构风格
- 每一层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。
- 在层次结构中,修改某一层,最多影响其相邻的上下两层(通常只能影响上层)。
- 上层必须指导下层的身份,不能调整层次之间的顺序。
- 如TCP/IP协议。
独立构件风格
主要特点:每个构件都是独立的个体,可以代表一切体现封装的“对象”。
例如:小到代码级的函数、类,大到一个服务端进程、集群、完整的系统。
进程通信
进程间消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用等。
事件驱动的系统
- 当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。
- 一个事件的触发就导致另一个模块中的过程调用。这是一种隐式调用的方式,优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便,其缺点是构件放弃了对系统计算的控制。
- 如:断点调试、新闻、公众号等订阅信息。
虚拟机风格
当底层不支持上层时,在两者之间加入一层虚拟机做模拟仿真,消除硬件和软件之间的差异。
- 解题技巧:自定义、灵活
解释器
-
通常包括一个完成解释工作的解释引擎、一个包含将被解释代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行进度的数据结构。
-
缺点是执行效率比较低。
-
如JVM。
-
解题技巧:游戏
基于规则的系统
- 包括规则集、规则解释器、规则/数据选择器和工作内存。
- 一般用在人工智能领域和
决策支持系统(Decision-making Support System, DSS)中。
仓库风格(数据共享风格)
数据库系统
-
构件分为中央共享数据源、独立处理单元。
-
构件控制中央共享数据。
-
如IDE集成开发环境、注册表、剪贴板。
-
一个或多个构件以主动触发的方式以调用顺序去更新共享数据存储区。
黑板系统
-
包括知识源、黑板和控制三个部分。
-
知识源:若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板。
-
黑板:一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介。知识源响应是通过黑板状态的变化来控制的。
-
黑板系统通常应用在对于解决问题没有确定性算法的软件中。
-
如语音识别、信号处理。

-
与数据库系统相反,一个或多个构件由控制单元通知以被动触发的方式以不确定的顺序去更新共享数据存储区。
-
每个构件可能多次参与执行流程,但流程本身无法事先确定。
超文本系统
-
静态网页

-
超文本系统中出现的构件以网状链接方式相互连接,用户可以在构件之间按照人类的思维方式任意跳转到相关构件。
闭环控制风格
闭环(过程)控制是将过程输出的指定属性维护在一个特定的参考值(设定值),将事务处理看成输入、加工、输出、反馈、再输入的一个持续的过程模型。
实例:空调的温度自动调节器(设定值是温度)、定速巡航系统(设定值是速度)。
闭环控制是根据控制对象输出反馈来进行校正的控制方式,它是在测定实际与计划发生偏差时,按定额或标准来进行纠正的。
- 解题技巧:空调的温度调节系统、巡航系统,数据流转允许存在环路,循环过程。
C2风格
C2体系结构风格可以概括为通过连接件绑定在一起按照一组规则运作的并行构件风格。
C2风格中的系统组织规则如下:
- 系统中的构件和连接都有一个顶部和一个底部。
- 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部。而构件与构件之间的直接连接是不允许的。
- 一个连接件可以和任意数目的其他构件和连接件连接。
- 当两个连接件进行直接连接时,必须由其中一个的底部连接到另一个的顶部。

二层C/S架构风格
二层C/S架构为单一服务器且以局域网为中心,所以难以扩展至大型企业广域网或Internet;软、硬件的组合及集成能力有限。
它的缺点主要有:
- 服务器的负荷太重,难以管理大量的客户机,系统的性能容易变坏。
- 数据安全性不好。客户端可以直接访问服务器,那么客户端上其他程序也可想办法访问服务器,从而使服务器的安全性受到威胁。
三层C/S架构风格
与二层C/S架构相比,在三层C/S架构中,增加了一个应用服务器。可以将整个应用逻辑驻留在应用服务器上,而只有表示层存在于客户机上。这种客户机称为瘦客户机。
三层C/S架构将应用系统分成表示层、功能层、数据层三个部分。
| 层次 | 功能 |
|---|---|
| 表示层 | 用户接口,检查用户输入的数据,显示输出的数据。 |
| 功能层 | 业务逻辑层,是将具体的业务处理逻辑编入程序中。 |
| 数据层 | 对DBMS进行管理和控制。 |
与传统二层C/S架构相比,三层C/S架构具有以下优点:
- 允许合理地划分三层结构,使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能提高系统的可维护性和可扩展性。
- 允许更灵活、有效地选用相应的平台和硬件系统,使之在处理负荷能力与处理特性上分别适应于结构清晰的三层,并且这些平台和各个组成部分可以都具有良好的可升级性和开放性。
- 系统的各层可以并行开发,各层也可以选择最适合的开发语言,使之能并行且高效的开发,达到较高的性能价格比。对每一层的处理逻辑的开发和维护也会更容易些。
- 利用功能层可以有效地隔离表示层与数据层,未授权的用户难以绕过功能层去利用数据库工具或黑客手段非法的访问数据层,这就为严格的安全性奠定了坚实的基础。
B/S架构
- B/S-浏览器/服务器(Browser/Server)架构是三层C/S架构的一种实现方式,其具体结构为“浏览器/Web服务器/数据库服务器”。
- B/S架构利用WWW浏览器技术,结合浏览器的多种脚本语言,用通用浏览器就实现了原来需要复杂的专用软件才能实现的强大功能,并节约了开发成本。
相关文章:
系统架构设计师—系统架构设计篇—软件架构风格
文章目录 概述经典体系结构风格数据流风格批处理管道过滤器对比 调用/返回风格主程序/子程序面向对象架构风格层次架构风格 独立构件风格进程通信事件驱动的系统 虚拟机风格解释器基于规则的系统 仓库风格(数据共享风格)数据库系统黑板系统超文本系统 闭…...
【MySQL_04】数据库基本操作(用户管理--配置文件--远程连接--数据库信息查看、创建、删除)
文章目录 一、MySQL 用户管理1.1 用户管理1.11 mysql.user表详解1.12 添加用户1.13 修改用户权限1.14 删除用户1.15 密码问题 二、MySQL 配置文件2.1 配置文件位置2.2 配置文件结构2.3 常用配置参数 三、MySQL远程连接四、数据库的查看、创建、删除4.1 查看数据库4.2 创建、删除…...
【Zinx】Day5-Part4:Zinx 的连接属性设置
目录 Day5-Part4:Zinx 的连接属性设置给连接添加连接配置的接口连接属性方法的实现 测试 Zinx-v1.0总结 Day5-Part4:Zinx 的连接属性设置 在 Zinx 当中,我们使用 Server 来开启服务并监听指定的端口,当接收到来自客户端的连接请求…...
【英伟达AI论文】多模态大型语言模型的高效长视频理解
摘要:近年来,基于视频的多模态大型语言模型(Video-LLMs)通过将视频处理为图像帧序列,显著提升了视频理解能力。然而,许多现有方法在视觉主干网络中独立处理各帧,缺乏显式的时序建模,…...
小程序事件系统 —— 32 事件系统 - 事件分类以及阻止事件冒泡
在微信小程序中,事件分为 冒泡事件 和 非冒泡事件 : 冒泡事件:当一个组件的事件被触发后,该事件会向父节点传递;(如果父节点中也绑定了一个事件,父节点事件也会被触发,也就是说子组…...
全球首款 5G-A 人形机器人发布
全球首款 5G-A 人形机器人于世界移动通信大会(MWC2025)上由中国移动、华为、乐聚联合发布。以下是关于这款机器人的详细介绍: 名称与背景 名称9:这款人形机器人名为 “夸父”,是中国移动、华为与乐聚机器人在 GTI 平台…...
Tomcat 新手入门指南
Tomcat 新手入门指南 Apache Tomcat 是一个开源的 Java Servlet 容器和 Web 服务器,广泛用于部署和运行 Java Web 应用程序。以下是 Tomcat 的入门指南,帮助你快速上手。 1. 安装 Tomcat 步骤 1: 下载 Tomcat 访问 Apache Tomcat 官网。选择适合的版…...
Flink-DataStreamAPI-生成水印
下面我们将学习Flink提供的用于处理事件时间戳和水印的API,也会介绍有关事件时间、流转时长和摄取时间,下面就让我们跟着官网来学习吧 一、水印策略介绍 为了处理事件时间,Flink需要知道事件时间戳,这意味着流中的每个元素都需要…...
【单片机】ARM 处理器简介
ARM 公司简介 ARM(Advanced RISC Machine) 是英国 ARM 公司(原 Acorn RISC Machine) 开发的一种精简指令集(RISC) 处理器架构。ARM 处理器因其低功耗、高性能、广泛适用性,成为嵌入式系统、移动…...
Flutter——最详细原生交互(MethodChannel、EventChannel、BasicMessageChannel)使用教程
MethodChannel(方法通道) 用途:实现 双向通信,用于调用原生平台提供的 API 并获取返回结果。 场景:适合一次性操作,如调用相机、获取设备信息等。 使用步骤: Flutter 端:通过 Meth…...
Kafka常用指令(详细)
Kafka常用指令(详细) 启停命令 前台启动 前台启动命令 ./bin/kafka-server-start.sh config/server.properties 后台启动方式1 后台启动命令加上参数-daemon,窗口关闭之后kafka后台程序继续运行 ./bin/kafka-server-start.sh -daemon co…...
供应链工作效率如何提升
提升供应链工作效率可以从以下几个关键方面入手: 1. 优化供应链管理 数据驱动决策:利用AI和大数据分析,提高预测准确性,优化库存管理。供应链可视化:采用ERP(企业资源计划)和SCM(供…...
1-001:MySQL的存储引擎有哪些?它们之间有什么区别?
MySQL 存储引擎 ├── InnoDB(默认引擎) │ ├── 事务支持:支持 ACID 和事务(事务日志、回滚、崩溃恢复) │ ├── 锁机制:支持行级锁,提高并发性能 │ ├── 外键支持:支持外键…...
Java/Kotlin逆向基础与Smali语法精解
1. 法律警示与道德边界 1.1 司法判例深度剖析 案例一:2021年某游戏外挂团伙刑事案 犯罪手法:逆向《王者荣耀》通信协议,修改战斗数据包 技术细节:Hook libil2cpp.so的SendPacket函数 量刑依据:非法经营罪ÿ…...
用AI学编程4——swift学习1
一个swift文件, 整理出swift从入门到精通的所有知识点, 给出注释, 给出这样的swift文件 以下是一个整合了 Swift 从入门到精通的主要知识点的 Swift 文件,包含了基础语法、面向对象编程、异常处理、集合框架、多线程、Lambda 表达…...
数据集构建与训练前准备
训练数据集目录结构与格式 作者笨蛋学法,先将其公式化,后面逐步自己进行修改,读者觉得看不懂可以理解成,由结果去推过程,下面的这个yaml文件就是结果,我们去推需要的文件夹(名字可以不固定,但是…...
在大型语言模型的提示词设计中,system、user和assistant三个角色的区别与联系
在大型语言模型的提示词设计中,system、user和assistant三个角色承担不同的功能,其区别与联系如下: 1. 角色定义与功能 system(系统指令) 作用:设定模型的整体行为、角色定位和任务框架。例如,“你是一位专业的科技作家”或“仅回答与医疗相关的问题”。特点:在多轮对话…...
Zabbix监控进程报警(Zabbix Monitoring Process Alarm)
zabbix监控进程占cpu、内存、磁盘RAID情况 1、cpu达到90%时报警 名称: cpu user percent gt 90% 表达式:{Template OS Linux:system.cpu.util[,idle].avg(1m)}<10 2、内存达到80%时报警 配置—主机(选择监控主机)—监控项—创建监控项 1、创建监控项 名称&…...
p5.js:sound(音乐)可视化,动画显示音频高低变化
本文通过4个案例介绍了使用 p5.js 进行音乐可视化的实践,包括将音频振幅转化为图形、生成波形图。 承上一篇:vite:初学 p5.js demo 画圆圈 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . copy .\node_modules\p5\lib\addons\p5.soun…...
HAL库常用函数
一、通用函数 系统初始化: HAL_Init(): 初始化HAL库和系统时钟(调用前需配置系统时钟源)。 HAL_Delay(uint32_t Delay): 毫秒级阻塞延时(基于SysTick定时器)。 HAL_GetTick(): 获取系统运行时间(毫秒计数…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
