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

目录

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设计

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

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

相关文章

【数学建模】优劣解距离法Topsis模型(含MATLAB代码)

TOPSIS法,全称 Technique for Order Preference by Similarity to an Ideal Solution,是由C.L.Hwang和K.Yoon于1981年首次提出的 。这是一种多目标决策分析中常用的有效方法,也被称作优劣解距离法 。 TOPSIS法的基本原理是通过检测评价对象与…

如何使用PHPStudy+Cloudreve搭建个人云盘并实现无公网IP远程访问——“cpolar内网穿透”

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

uniapp中scroll-view初始化的时候 无法横向滚动到某个为止

项目需求 实现日历&#xff08;13天&#xff09;默认高亮第六天 并定位到第六 左边右边各六天&#xff08;可以滑动&#xff09; 直接上代码 <template><scroll-view class"scroll-X":show-scrollbar"true" :scroll-x"scrollable":…

Chrome 侧边栏开发示例

前言 最近做项目&#xff0c;需要开发浏览器扩展&#xff0c;但是考虑页面布局兼容性问题&#xff0c;使用了Chrome114开始的侧边栏&#xff0c;浏览器自带的能力毕竟不会出现兼容性问题&#xff0c;不过Chrome123开始&#xff0c;侧边栏居然又可以选择固定右侧扩展栏了&#…

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

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

LCR 039

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/0ynMMM/ 给定非负整数数组 heights &#xff0c;数组中的数字用来表示…

共享内存和信号灯集练习

#include <mystdio.h> int main(int argc, const char *argv[]) { //创建key值 key_t key ftok("/home/ubuntu",2); if(key<0) { perror("ftok"); return -1; } printf("key%#x\n",key); …

上位机图像处理和嵌入式模块部署(树莓派4b和类muduo网络编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 既然是linux编程&#xff0c;那么自然少不了网络编程。在linux平台上面&#xff0c;有很多的网络编程库可以选择&#xff0c;大的有boost、qt&…

【Linux】系统安全及应用

目录 一、账号安全基本措施 1.系统账号清理 2.密码安全控制 3.历史命令安全管理 4.限制su切换用户 1&#xff09;将信任的用户加入到wheel组中 2&#xff09;修改su的PAM认证配置文件 5.ssh远程登录输入三次密码错误则锁定用户 二、Linux中的PAM安全认证 1.su命令的…

革命性创新,实景AI无人自动直播系统,轻松实现24小时日不落直播卖券。

革命性创新&#xff01;实景AI无人自动直播系统&#xff0c;轻松实现24小时日不落直播卖券&#xff01; 最近&#xff0c;越来越多的朋友纷纷关注到了AI自动直播带货的新玩法&#xff0c;并且也都想要开设自己的自动直播间。然而&#xff0c;对于这种自动讲解、自动回复的直播…

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号&#xff1a;Qt 学…

C语言枚举类型详解

下午好诶&#xff0c;今天小眼神给大家带来一篇C语言枚举类型详解的文章~ 目录 一、枚举类型的声明 二、枚举类型的优点 三、枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是 一 一 列 举 。 比如&#xff1a; 一周从周一到周日共有七天&#xff0c;可以一一列举。 性…

Next.js多页布局getLayout使用方法

目录 官网解释 直接上代码使用方法展示 1.page页面​编辑 2._app.js页面,也放在pages中​编辑 效果展示 有getLayout展示getLayout返回的页面布局 无getLayout展示默认布局 官网解释 如果需要多个布局&#xff0c;可以添加一个属性getLayout添加到您的页面&#xff0c;允…

xpath的使用以及原理-元素定位

# 查找文本框输入文本 driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("i_cecream查找到了") #查找到之后点击 driver.find_element(By.CLASS_NAME,"nav-search-btn").click()time.sleep(30)selenium4的解析。 client调用se…

【draw.io的使用心得介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

webpack-babel2

浏览器的兼容性问题 浏览器的兼容性问题不知包括随屏幕大小而变化&#xff0c;还包括针对浏览器支持的特性&#xff08;如css特性&#xff0c;js特性&#xff09; 做处理。 目前市场上有很多浏览器&#xff1a;Chrome,Safari,IE,Edge等&#xff0c;要根据它们的市场占有率来决…

数据分析(1)

数据分析基础&#xff08;1&#xff09; 为了让刚开始学习的朋友对数据分析有一个清晰的整体认识&#xff0c;因此笔者在此对数分进行一个较为详细的介绍有助于大家更好的在宏观层面进行理解&#xff0c;避免在后续学习中产生迷茫。 数据分析的概念 定义&#xff1a;数据分析…

Linux系统-进程和计划任务管理

一.程序和进程 1.程序 保持在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码 2.进程 在CPU及内存中运行的程序代码动态执行的代码父、子进程每个程序可以创建一个或多个进程 3.进程特征 动态性&#xff1a;进程是程序的一次执行过程&#xff0c;是临时的&…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

Cyber Weekly #3

赛博新闻 1、Meta发布最强开源模型Llama3[1] 4月19日凌晨&#xff0c;Meta Llama 3发布&#xff0c;模型包含8B和70B两种参数规模&#xff08;400B还在训练中&#xff09;&#xff0c;Llama 3使用了超过 15T token的训练数据&#xff0c;8B版本数据更新截止至2023年3月&#…