【软考---系统架构设计师】软件架构

目录

1

一、软件架构的概念

二、软件架构风格

(1)数据流风格​​​​​​​

(2)调用/返回风格

(3)独立构件风格

(4)虚拟机风格

(5)仓库风格

三、架构描述语言(ADL)

四、基于架构的软件开发

五、质量属性

六、软件架构评估

七、软件产品线

软件产品线的建立方式

软件产品线——组织结构

八、构件与中间件技术

九、Web架构设计


软件架构重要考点

    *软件架构的概念(***)

    *软件架构风格(*****)

    *架构描述语言ADL(***)

    *特定领域软件架构(***)

    *基于架构的软件开发(****)

    *软件质量属性(*****)

    *软件架构评估(*****)

    *软件产品线(***)

    *构件与中间件技术(****)

    *Web架构设计(*****)

一、软件架构的概念

一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。

体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够:

  • 分析设计在满足规定需求方面的有效性。
  • 在设计变更相对容易的阶段,考虑体系结构可能的选择方案。
  • 降低与软件构造相关联的风险。

架构设计就是需求分配,即将满足需求的职责分配到组件上

二、软件架构风格

(1)数据流风格

批处理序列

构件作为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。

管道-过滤器

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

早期编译器就是采用的这种架构。要一步一处理的,均可考虑采用此架构风格

(2)调用/返回风格

主程序/子程序

单线程控制,把问题划分为为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。

面向对象

构件是对象,对象是抽象数据类型的实例。

层次结构

构件组织成一个层次结构,连接件通过决定层间如何交互的协议来定义,每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。

层次结构的优点

(1)支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。

(2)不同的层次处于不同的抽象级别

(2)为软件复用提供了强大的支持

缺点

(1)并不是每个系统可以很容易低划分为分层的模式

(2)很难找到一个合适的,正确的层次抽象方法

(3)独立构件风格

进程通信

构件是独立的过程,连接件是消息传递。

事件驱动系统(隐式调用)

构件不直接调用一个过程,而是触发或广播一个或多个事件。(注意是触发,关键字是触发)

(4)虚拟机风格

解释器

具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,其缺点是执行效率比较低(关键字是自定义需求的场景)

基于规则的系统

有相应的知识库作为支撑,一般用于人工智能领域和DSS(辅助决策)中。

(5)仓库风格

数据库系统

就我们用的那些MySQL,oracle等等啊,大致就是这种意思

黑板系统

包括有知识源,黑板,控制三部分。黑板是一个全局数据库,就是相当于一个共享的。具体例子:信号处理,语音识别,问题规划,编译器优化等。

超文本系统

构件以网状链接方式相互连接,类比于HTML的超文本链接

现代集成编译环境一般采用这个这种架构风格

上面说的五种风格是主要的,后面的架构风格也要求掌握

(1)闭环控制架构(过程控制)

当软件被用来操作一个物理系统时,软件和硬件之间可以粗略地表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。适用于嵌入式系统,涉及连续的动作与状态。(关键看有没有从环境中取值,然后不断地去调整平衡)

(2)C2风格

(3)层次架构风格

MVC架构风格

Model(模型)

View(视图)

Controller(控制器)

MVP架构风格

View

Model

Presenter

MVP是MVC的变种,实现了V和M之间的解耦,并且更好的支持单元测试;业务逻辑在P中,界面事件由C处理
 

MVVM风格

(4)富互联网应用(RIA)

思想:第一次打开缓慢,但是之后的运行快,表现力强。原因是第一次打开时将常用的资源都下载到了本地。

(5)基于服务的架构(SOA)                                                        

服务是一种为了满足某项业务需求的操作,规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。

SOA是一种思想,一种方法论,但是没有提供具体实践性的一些标准实践性标准包括了服务总线(ESB)

特点:松散耦合,粗粒度,标准化接口

SOA的实现方式——Web Service

SOA的实现方式——ESB

企业服务总线(ESB)

提供位置透明性的消息路由和寻址服务

提供服务注册和命名的管理功能

提供日志和监控功能

(6)微服务架构

将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合。

特点:

小,且专注于做一件事情,轻量级的通信机制,松耦合,独立部署

微服务和SOA区别

微服务SOA
能拆分就拆分是整体的,服务能放在一起就都放在一起
纵向业务拆分       是水平分多层
由单一组织负责按层级划分不同部门的组织负责
细粒度粗粒度
两句话可以解释明白几百字只相当于SOA的目录
独立的子公司类似大公司里面划分了一些业务单元
组件小存在较复杂的组件
业务逻辑存在于每一个服务中业务逻辑横跨多个业务领域
使用轻量级的通信方式,如HTTP企业服务总线(ESB)充当了服务之间通信的角色

(7)MDA风格

使用模型完成软件分析,构建,部署等活动。模型驱动

三、架构描述语言(ADL)

ADL的三个基本元素

(1)构件:计算或数据存储单元

(2)连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则

(3)架构配置:描述体系结构的构件与连接件的连接图

四、特定领域软件架构(DSSA)

领域分析机制中的角色:

领域专家(充当军师)

领域分析人员,领域设计人员,领域实现人员(这三个都是干活的) 

DSSA——三层次模型

四、基于架构的软件开发

基于架构的软件开发方法——基于架构的软件设计(ABSD)

ABSD方法是架构驱动,即强调由业务,质量和功能需求的组合驱动架构设计。

ABSD方法有三个基础。第一个基础是功能的分解;第二个基础是通过选择架构风格来实现质量和业务需求;第三个基础是软件模板的使用

ABSD方法是递归的,且每一个步骤都是清晰定义的。

视角和视图:从不同的视角来检查,所以有不同的视图。

用例用来捕获功能需求,特定场景来捕获质量需求(非功能需求)

基于架构的软件开发方法——开发过程

五、质量属性

其实质量属性是属于软件架构评估这一个大的知识点中的

1、性能

性能是指系统的响应能力,即要经过多长时间才能对某个时间做出响应,或者在某段时间内系统所处理的事件的个数。

代表参数:响应时间,吞吐量                      设计策略:优先级队列,资源调度

2、可用性

指系统能够正常运行的时间比例。经常用两次故障之间的时间长度或出现故障时系统能够恢复正常的速度来表示。

代表参数:故障间隔时间                               设计策略冗余,心跳线

3、安全性

指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。

设计策略:追踪审计

4、可修改性

指能够快速地以较高的性能价格比对系统进行变更的能力。

主要策略:信息隐藏

5、可靠性

是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。主要考虑两个方面:容错,健壮性。(一般符合情况都认为是可用性,除非特别强调才认为是可靠性)

后面的其实不怎么重要,知道有就行了

6、功能型

7、可变性

8、互操作性

六、软件架构评估

风险点:系统架构风险是指架构设计潜在的,存在问题的架构决策所带来的隐患。

敏感点:为了实现某种特定的质量属性,一个或多个构建所具有的特性

权衡点:影响多个质量属性的特性,是多个质量属性的敏感点

非风险点:是指不会带来隐患,一般以XXX要求是可以实现或接受的方法表达

软件架构评估——基于场景的方式

(1)SAAM

最初用于分析架构可修改性,后扩展到其他质量属性

(2)ATAM

在SAAM基础上发展起来的,主要针对性能,实用性,安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中。

第一阶段 场景和需求收集

第二阶段 架构视图和场景实现

第三阶段 属性模型构造和分析

第四阶段 折中

七、软件产品线

产品线是多个知识领域的综合体,软件产品线会包括特定领域架构DSSA

特点:核心资源,产品集合,过程驱动,特定领域,技术支持,以架构为中心。

软件产品线的建立方式

演化方式革命方式
基于现有产品基于现有产品架构设计产品线的架构,经演化现有构件,开发产品线构件(将现有产品演化为产品线核心资源的开发基于现有产品集的需求和可预测的,将来需求的超集(用软件产品线替代现有产品集
全新产品线产品线核心资源随产品新成员的需求而演化(全新软件产品线的演化开发满足所有预期产品线成员的需求的核心资源(全新软件产品线的开发

软件产品线——组织结构

组织结构类型

(1)设立独立的核心资源小组

(2)不设立独立的核心资源小组

(3)动态的组织结构

成功实施产品线的主要取决因素;

(1)对该领域具备长期和深厚的经验

(2)好的产品线架构

(3)好的管理(软件资源,人员组织,过程)支持

(4)一个用于构建产品的好的核心资源库

八、构件与中间件技术

构件

定义:软件构件是一个组装单元,它具有规范的接口约束和显示的语境依赖。软件构件可以被独立地部署并由第三方任意地组装

构件的复用

构件的复用分为四步:

(1)检索与提取构件

(2)理解与评价构件

(3)修改构件

(4)组装构件

中间件技术

中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源

中间件技术的优点

(1)面向需求

(2)业务的分隔和包容性

(3)设计与实现隔离

(4)隔离复杂的系统资源

(5)符合标准的交互模型

(6)软件复用

(7)提供对应应用软件的管理

具体的中间件技术

Corba(公共对象请求代理体系结构)

伺服对象:CORBA对象的真正实现,负责完成客户端请求

对象适配器:用于屏蔽ORB内核的实现细节,为服务器对象的实现着提供抽象接口,以便他们使用ORB内部的某些功能

对象请求代理:解释调用并负责查找实现该请求的对象,将参数传给找到的对象,并调用方法返回结果。客户方不需要了解服务器对象的位置,通信方式,实现,激活或存储机制。

九、Web架构设计

从架构来看        MVC,MVP,MVVM,REST,Webservice,微服务,中台
从缓存来看MemCache,Redis,Squid
从并发分流来看集群(负载均衡),CDN
从数据库来看主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图
从持久化来看Hibernatr,Mybatis
从分布存出来看Hadoop,FastDFS,区块链
从数据编码来看XML,JSON
从Web应用服务器来看Apache,,WebService,WebLogic,Tomcat,JBOSS。
其他静态化,有状态与无状态,响应式Web设计

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

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

相关文章

labview中循环停止事件的深入研究

1.错误用法 第一次值事件运行的时候空白按钮给的F值,第二次值事件运行的时候空白按钮给的T值,这时循环才真正结束。 2.正确用法之一 赋值和值改变事件从同时进行变成按顺序执行。 3.正确用法之二 值事件发生以后超时事件将T值赋值给结束条件&#xff…

Linux环境变量深度解析

文章目录 一、引言二、环境变量的基本概念1、环境变量的定义2、环境变量的作用与意义 三、环境变量的导入1、导入所需文件2、登陆时的导入 四、环境变量的设置方法1、查看环境变量的方式2、使用export命令临时设置环境变量3、修改配置文件以永久设置环境变量 五、命令行参数与环…

免费听音乐,下载音乐mp3,mp4,歌词的网站分享(2024-04-22)

亲测!!! 1、音乐客 免费听和免费下载 经典老歌 - 音乐客音乐客,yinyueke.net,免费音乐,免费在线音乐播放器,免费下载音乐,音乐,播放器,下载,播放,DJ,免费,mp3,高音质,…

LinkedList和链表

1.ArrayList的缺陷 ArraryList由于底层是一段连续的空间,所以在ArrayList任意位置插入或者删除元素时,就 需要将后续元素往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order,本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

C++的初步知识——命名空间,缺省参数,重载函数

C 首先写一段代码&#xff1a; #include <stdio.h>int main() {printf("Hello world\n");return 0; }这段C语言代码在cpp文件中仍可运行。我们了解C是兼容C语言的&#xff0c;C的关键字中就包含了C语言的关键字和自身的关键字。关于关键字&#xff0c;我们简…

PTA L2-052 吉利矩阵

题目 解析 这题考的是搜索剪枝 可行性剪枝&#xff1a; 即判断当前行&#xff08;列&#xff09;是否已经超过L和剩下的格子都填最大值是否小于L&#xff0c;若是则剪枝。 当前行数大于1时&#xff0c;判断上一个填完的行是否等于L&#xff0c;若否&#xff0c;则剪枝。 当前行…

浏览器数据找回

网站上分享的文章应该都是个人的心血&#xff0c;对于一些操作问题导致心血丢失真的很奔溃&#xff0c;终于找到一个弥补的办法&#xff0c;csdn的文章谷歌浏览器亲测有效&#xff0c;理论上其他浏览器的其他网站应该也可以&#xff0c;适用以下场景 把博客编辑当成了编写新博…

MATLAB中gurobi 运行报错与调试

问题背景如下&#xff1a;刚拿到一份MATLAB的代码&#xff0c;但是电脑第一次安装gurobi&#xff0c;在运行过程中发生了报错&#xff0c;使用断点进行调试和步进调试方法&#xff0c;最终发现&#xff0c;这个问题出在了哪一步&#xff0c;然后向了人工智能和CSDN、百度寻求答…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

李宏毅2022机器学习/深度学习 个人笔记(2)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录第一讲&#xff08;选修&#xff09;&#xff1a;神奇宝贝分类&#xff08;续&#xff09; 讲解如何用高斯概率分布假设来推导类似于逻辑斯蒂分布的表达式 如图&#xff0c;boundary变为直线&…

JavaSE——常用API进阶二(7/8)-DateTimeFormatter、Period、Duration(常见方法、用法示例)

目录 DateTimeFormatter 主要方法 用法示例 Period 常见方法 用法示例 Duration 常见方法 用法示例 接下来继续要学习的是JDK 8之后新增的代替SimpleDateFormat的一个API——DateTimeFormatter 同样是用来格式化和解析时间的&#xff0c;与SimpleDateFormat相比较来说…

kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

1、上一节课我们学习了MQTT producer 生产者步骤&#xff0c;MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据&#xff0c;该步骤和kafka consumer 一样可以处理实时数据交互&#xff0c;如下图所示&#xff1a; 2、双击步骤打开MQTT consumer 配置窗口&a…

ROS下机器人系统仿真及部分SLAM建图

文章目录 一、 Launch文件使用二、 参考资料三、 遇到的问题四、 效果演示五、相关代码5.1 一些简介5.2 机器人模型5.2.1 机器人底盘5.2.2 摄像头5.2.3 雷达 5.3 惯性矩阵 六、代码传送门实验结果及分析 温馨提示&#xff1a;如果有幸看到这个文章&#xff0c;不要看里面的内容…

java-单列集合List详解

一、List概述 ​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象&#xff0c;它们共享 Collection 接口中定义的所有方法。 List集合的特点&#xff1a; 1、有序&#xff1a;存和取得元素顺序一致 2、有索引&#xf…

使用FPGA实现比较器

介绍 比较器就是通过比较输入的大小&#xff0c;然后输出给出判断。 在这个比较器中&#xff0c;有两个输入&#xff0c;三个输出。根据输出就可以判断出哪个输入值大了。 设计文件 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity compa…

【大语言模型LLM】-使用大语言模型搭建点餐机器人

关于作者 行业&#xff1a;人工智能训练师/LLM 学者/LLM微调乙方PM发展&#xff1a;大模型微调/增强检索RAG分享国内大模型前沿动态&#xff0c;共同成长&#xff0c;欢迎关注交流… 大语言模型LLM基础-系列文章 【大语言模型LLM】-大语言模型如何编写Prompt?【大语言模型LL…

zabbix监控华为网络设备路由器eNSP(3)

如果有没搭建zabbix的网友可以先看我上一个搭建文档&#xff0c;把监控系统搭建上https://blog.csdn.net/weixin_72819498/article/details/137751059 拓扑图&#xff1a; 绑定和服务器同地址的网卡 1.监控端配置 (1)SNMP服务安装 [rootzbx-server ~]# yum -y install net-…

编译一个基于debian/ubuntu,centos,arhlinux第三方系统的问题解答

如果是开机卡boot注意看前面几行会有错误提示&#xff0c;一般会比较好找&#xff0c;下面是过了kernel内核加载后出现的问题 目录 上一篇文章 第一个问题 错误原因 解决办法 第二个问题 注意 第三个问题 上一篇文章 编译一个基于debian/ubuntu,centos,arhlinux第三方系…

什么是0-day漏洞,怎么防护0-day漏洞攻击

随着信息技术的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中0day漏洞攻击作为一种高级威胁手段&#xff0c;给企业和个人用户带来了极大的风险。下面德迅云安全就对0day漏洞攻击进行简单讲解下&#xff0c;并分享相应的一些安全措施&#xff0c;以期提高网络安全…