【软考】系统架构设计风格分类的个人理解

个人适当学习了软考系统架构设计师中关于系统架构设计相关的内容,梳理了一下相关信息。

常见架构类型和常见分类

常见的软考中出现的系统架构列举如下:

  • 分层架构
  • 管道-过滤器架构
  • 客户端-服务器架构
  • 模型-视图-控制器架构,即MVC架构
  • 事件驱动架构
  • 微服务架构
  • 黑板架构
  • 解释器模式
  • 数据仓库风格架构
  • 面向服务架构

网上查找到的资料一般把架构分为五类架构风格,分别是数据流风格,调用返回风格,独立构建风格,虚拟机风格和仓库风格。并对上述系统进行了归类,归类到这五种架构风格中。

在这里插入图片描述

架构分类之个人理解

以下纯属个人角度的理解,和软考本身的考点和预期可能不相符合,请注意甄别。

针对上述分类个人认为,感觉有在把不同维度或者层次的内容强行放在同一层次来进行比较的嫌疑,个人感觉非常别扭,所以我重新按照个人的理解进行了分类。同时也参考了上述的五类架构风格的分类。

上述分类个人感觉是在把不同层次的系统混为一谈,比如说"分层架构",可以是服务器程序,也可以是客户端程序中的一种实践方式,但是客户端-服务器架构,则是在描述一个典型的网络结构模式,当然这也可以是一种广义上的系统架构,但是因为需要从系统架构的角度去分类,混为一谈就会显得很混乱,所以我觉得最重要的是理清楚系统的层次的概念。

个人按照两层一类来对上述架构风格进行划分。

第一层,整体系统 还是 单体系统

第一层是当前描述的系统是否存在和外界的交互,不存在交互则是一个逻辑自洽的整体系统,而存在交互则认为这个系统是一个和外界存在交互的单体系统。

从这个层面来说,客户端-服务器架构个人认为描述的是一个整体系统,事件驱动架构个人认为也是一个整体系统,这里可能会存在疑问,事件驱动往小了说是一种编程框架,往大了说则决定了系统的运行机制,我理解事件驱动架构的核心是决定了包括客户端和服务器在内的整个系统的信息交互方式,也就是客户端和服务器不直接交互,而是通过这个事件驱动框架进行交互,这就是事件驱动架构。

而上述其他的架构,个人认为都是在描述单体系统。

第二类,请求响应系统 还是 输入输出系统

第二类是对单体和外界交互的方式进行分类。我们这里把单体系统都视作服务端(比如手机APP也可以视作服务端,客户端就是我们用户,或者是其他调用这个app的APP)根据客户端在发起请求后,和服务端的输出产物之间的关系,可以分为请求返回响应系统和输入输出系统。

请求返回响应系统中,客户端需要获取系统返回的结果,个人理解为输出结果和输入来源是同一媒介或者说界面,比如都是通过网络链路接收请求和返还结果,或者手机app界面上触发的修改,最终将修改结果呈现在手机app界面上。个人认为上述的分层架构,MVC架构,微服务架构,黑板架构,数据仓库风格架构,面向服务架构都是属于这一类的。

而输入输出系统中,客户端不需要获取到系统返回的结果,客户端只是输入系统,而输出是在其他界面,或者说是其他介质上。比如管道-过滤器系统的典型应用,编译器,输入为源文件,输出产物为可执行文件。或者闭环控制架构,其输入为设定的温度,和从温度传感器接收到的当前温度,但输出是对制冷的化学过程的执行强度的控制。包括上述虚拟机风格中的解释器模式,个人认为也可以归为此类。输入为代码或者字节码,输出为操作系统的执行目标,也就是一个接近流式的处理流程。

第三层,物理上可拆分单体 还是 物理上不可拆分单体

第三层个人认为是单体系统内部是否可拆分为不同的单体。当然分层架构,内部也可以认为是有很多个不同的模块组成的,但其在物理结构上,本质上还是一个物理上不可拆分的单体,只是在逻辑上是可拆分的。

分层架构,数据仓库风格架构,黑板架构个人认为都是物理上不可拆分的单体架构。而模型-视图-控制的MVC架构,个人认为就是分层架构在WEB应用场景下的一种特例。

面向服务架构个人认为就是一种典型的物理上可拆分的单体架构,即内部可以进一步拆成物理上不同的系统,这里应该是特指物理上可拆分的请求响应系统。而微服务架构可以认为是面向服务架构的一种特例,系统架构设计时以细粒度地解耦地拆分服务为要务的一种设计方式。

个人分类Xmind

在这里插入图片描述

具体架构的简要说明

架构的组成成分

每一种架构都有各自不同的组成构件。以下列举下几种常见架构的组成构件。

  • 分层架构(四层为例:展现层,业务层,持久层,数据层)

  • 管道-过滤器架构(过滤器类型:过程起点,数据转换,测试条件,终点)

  • MVC架构(模型,视图,控制器)

  • 黑板架构(黑板,知识源,控制组件)

架构的评估维度

每种架构都可以从 使用场景类型,优点,缺点,实际用途各个维度进行理解和评估。这个待后续补充。

参考文档

https://zhuanlan.zhihu.com/p/603201577
https://zhuanlan.zhihu.com/p/564143827

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

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

相关文章

AutoDL 训练stable-diffusion lora模型

1.创建镜像实例 2. 启动实例 3.启动服务 4.配置参数 4.1 基础模型选择 4.2 文件路径设置 5.点击打印训练信息 6.训练模型(点击Train model)

SpringBoot整合knife4j

knife4j 文档地址:https://doc.xiaominfo.com/ knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。 Swagger介绍 前后端分离开发模式中,api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架,用于生成、描述、调用和…

华为发布大模型时代AI存储新品

7月14日,华为发布大模型时代AI存储新品,为基础模型训练、行业模型训练,细分场景模型训练推理提供存储最优解,释放AI新动能。 企业在开发及实施大模型应用过程中,面临四大挑战: 首先,数据准备时…

STM32学习笔记(十三)丨USART通用同步/异步收发器(串口外设的基本使用丨串口发送数据、串口发送+接收数据)

本篇文章包含的内容 一、STM32的USART外设1.1 STM32的USAER外设简介1.2 USART外设的结构和工作原理1.3 串口通信数据帧1.4 起始位侦测和USART的噪声判断机制1.5 波特率发生器 二、串口发送和接收数据包2.1 HEX数据包2.2 文本数据包2.3 固定包长HEX数据包接收2.4 可变包长文本数…

【2023 年第三届长三角高校数学建模竞赛】B 题 长三角新能源汽车发展与双碳关系研究 18页论文、数据和代码

【2023 年第三届长三角高校数学建模竞赛】B 题 长三角新能源汽车发展与双碳关系研究 18页论文、数据和代码 1 题目 《节能与新能源汽车技术路线图 2.0》提出至 2035 年,新能源汽车市场占比超过 50%,燃料电池汽车保有量达到 100 万辆,节能汽车…

商品价格怎么监测

电商已经深入人们的生活,现在无论何种类型的产品,总能在电商平台找到相应的产品链接,品牌为了扩大销售,也会以电商平台作为重要的销售战场,所以电商平台的商品价格也是品牌重点关注的,电商平台的低价会引起…

kafka消息队列最常用的两种模式,以及应用场景

目录 一、发布-订阅模式 二、点对点模式 三、应用场景 一、发布-订阅模式 发布-订阅模式是最常见的消息传递模式,其中消息发布者将消息发送到一个或多个主题(Topic),而订阅者可以选择订阅一个或多个主题来接收消息。每个订阅者…

React(2)

题外话&#xff1a;vscode有个插件可以很方便的快速写代码 输入rcc回车 1.组件嵌套 import React, { Component } from reactclass Navbar extends Component{render(){return <div>Navbar</div>} }const Swiper()>{return <div>Swiper</div> }cons…

适合小公司的自动化部署脚本

背景&#xff08;偷懒&#xff09; 在小小的公司里面&#xff0c;挖呀挖呀挖。快挖不动了&#xff0c;一件事重复个5次&#xff0c;还在人肉手工&#xff0c;身体和心理就开始不舒服了&#xff0c;并且违背了个人的座右铭&#xff1a;“偷懒”是人类进步的第一推动力。 每次想…

资深测试总结,自动化测试-JSON+YAML+CSV+Excel数据驱动(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 数据驱动 在自动…

pytorch深度学习逻辑回归 logistic regression

# logistic regression 二分类 # 导入pytorch 和 torchvision import numpy as np import torch import torchvision from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import matplotlib.pyplot as …

android editText获取不到数据

问题分析&#xff1a;在onActivityCreated一开始就创建了findViewById&#xff0c;这时获取的是默认值&#xff0c;需要在点击按钮时重新加载才能获取到输入数据。 需要在点击按钮时重新加载数据&#xff1a;

ORACLE TO POSTGRESQL 来自2天上海的印象

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

.NET网络编程——TCP通信

一、网络编程的基本概念 : 1. 网络 就是将不同区域的电脑连接到一起&#xff0c;组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息&#xff0c…

netty组件详解-上

netty服务端示例: private void doStart() throws InterruptedException {System.out.println("netty服务已启动");// 线程组EventLoopGroup group new NioEventLoopGroup();try {// 创建服务器端引导类ServerBootstrap server new ServerBootstrap();// 初始化服…

了解交换机接口的链路类型(access、trunk、hybrid)

上一个章节中讲到了vlan的作用及使用&#xff0c;这篇了解一下交换机接口的链路类型和什么情况下使用 vlan在数据包中是如何体现的&#xff0c;在上一篇的时候提到测试了一下&#xff0c;从PC1去访问PC4的时候&#xff0c;只从E0/0/2发送给了E0/0/3这是&#xff0c;因为两个接…

【SpringⅡ】简单高效地存储读取对象

目录 &#x1f9e5;1 配置扫描路径 &#x1f9e4;2 类注解实现 Bean 对象的存储 &#x1fa71;2.1 五大类注解的使用 &#x1f381;2.2 五大类注解之间的关系 &#x1f38f;2.3 Java 项目的标准分层 &#x1f383;3 方法注解实现 Bean 对象的存储 &#x1f388;3.1 Bean…

【论文阅读】一些多轮对话文章的体会 ACL 2023

前言 本文是对昨天看到的ACL 2023三篇多轮对话文章的分享这三个工作都是根据一些额外属性控制输出的工作&#xff0c;且评估的方面比较相似&#xff0c;可以借鉴 方法 这几篇文章都不是做general任务的&#xff0c;倾向于通过一些额外信息&#xff0c;来做specific任务 【1】…

【ceph】存储池pg个数如何设置

存储池pg个数如何设置 参考官方文档说明&#xff1a;https://old.ceph.com/pgcalc/参数说明TargePGs per OSD&#xff1a;每个OSD的pg数OSD#存储池包含osd个数%Data存储池写入数据占总OSD容量百分比Size存储池冗余数

vue2watch监听遇到的问题

1 vue 父组件里引入子组件 显示与隐藏是v-if控制时 父传入子的参数通过watch 监听请求接口时 watch 时而监听不到 请求接口的参数就不对 如图 父组件这么引入子组件v-show 和v-if 是有区别的 2 子组件通过watch 监听后 清空页面要展示的列表数据 重新从第一页加载数据&#x…