系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】
系列文章目录
系统架构设计高级技能 · 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】
系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】
系统架构设计高级技能 · 软件可靠性分析与设计(三)【系统架构设计师】
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。
Now everything is for the future of dream weaving wings, let the dream fly in reality.
系统架构设计 · 系统质量属性与架构评估(二)
- 系列文章目录
- 一、软件系统质量属性的概念★★★
- 1.1 开发期的质量属性
- 1.2 运行期的质量属性
- 二、面向架构评估的质量属性
- 2.1 性能
- 2.3 可用性
- 2.4 安全性
- 2.3 可修改性
- 2.4 易用性
- 2.5 可测试性
- 2.6 可靠性
- 2.7 功能性
- 2.8 可变性
- 2.9 互操作性
- 三、质量属性场景描述
- 四、系统架构评估
- 4.1 系统架构评估的重要概念
- 4.1.1敏感点、权衡点、风险点、非风险点
- 4.1.2 风险承担者或者相关利益人
- 4.1.3 场景
- 4.2 系统架构评估方法
- 4.2.1 基于场景 - 软件架构分析法SAAM
- 4.2.2 基于场景 - 架构权衡分析法ATAM
- 4.2.3 质量属性效用树
一、软件系统质量属性的概念★★★
1.1 开发期的质量属性
开发期的质量属性分为以下子属性:
属性 | 说明 |
---|---|
易理解性 | 指设计开发人员理解的难易程度。 |
可扩展性 | 软件因适应新需求变化而增加新功能的能力,也称为灵活性。 |
可重用性 | 指重用软件系统或某一部分的难易程度。 |
可测试性 | 当软件测试以证明其满足需求规范的难易程度。 |
可维护性 | 当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。 |
可移植性 | 将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。 |
1.2 运行期的质量属性
运行期的质量属性分为以下子属性:
属性 | 说明 |
---|---|
性能 | 软件系统及时提供相应的服务能力,如速度、吞吐量和容量等。 |
安全性 | 软件系统同时兼顾向合法用户提供服务,以及组织非授权使用的能力 。 |
可伸缩性 | 当用户数和数据量增加时,软件系统维持高服务质量的能力。 |
互操作性 | 软件系统与其他系统交换数据和相互调用服务的难易程度。 |
可靠性 | 软件系统在一定时间内持续无故障运行的能力。 |
可用性 | 系统在一定时间内正常工作的时间所占比例。 |
鲁棒性 | 软件系统在非正常情况(用户进行非法操作、相关软硬件系统发生故障)下仍正常运行的能力,也称健壮性或容错性。 |
二、面向架构评估的质量属性
在架构评估过程中,评估人员所关注的是系统的质量属性。
2.1 性能
性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
例如:
- 同时支持1000并发
- 响应时间小于1s
- 显示分辨率达到4K
提升性能的策略(性能战术)可以从以下几个方面考虑:
- 资源需求 :
①提高计算效率、②减少计算开销、③管理(减少处理事件数量)事件率、④控制采样频率(控制资源的使用) - 资源管理 :
①引入并发机制、②维持多个副本、③增加可用资源 - 资源仲裁 :
资源调度策略:①先进先出、②固定优先级、③动态优先级、④静态调式
2.3 可用性
可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
例如:
- 主服务器故障,1分钟内切换至备用服务器
- 系统故障,1小时内修复
- 系统支持7×24小时工作
提升可用性的策略(可用性战术)可以从以下几个方面考虑:
- 错误检测 :
①命令/响应【Ping/Echo】、②心跳、③异常 - 错误恢复 :
①表决、②冗余【主动/被动】、③备份【重新同步、内测、检查点/回滚】 - 错误避免 :
①进程监视器、②事务、③从服务器删除【服务下线】
2.4 安全性
安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可划分为机密性、完整性、不可否认性及可控性等特性。
例如:
- 可抵御SQL注入攻击
- 对计算机的操作都有完整记录(日志,审计追踪)
- 用户信息数据库授权必须保证99.9%可用
提升安全性的策略(安全性战术)可以从以下几个方面考虑:
- 抵抗攻击 :
①用户身份验证、②用户授权、③维护数据机密性和完整性、④限制暴露、⑤限制访问 - 检测攻击 :
①入侵系统检测 - 从攻击中恢复 :
①识别攻击者:审计追踪、②恢复状态:冗余【与可用性重叠】
2.3 可修改性
可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。
例如:
- 更改系统报表模块,必须在2人周内完成
- 对Web界面风格进行修改,修改必须在4人月内完成
可修改性分为四个子属性:
可维护性:局部修复使故障对架构的负面影响最小化。
可扩展性:因松散的耦合更易实现新特性/功能,不影响架构。
结构重组:不影响主体进行的灵活配置。
可移植性:适用于多样的环境(硬件平台、语言、操作系统等)。
提升性能的策略(可修改行战术)可以从以下几个方面考虑:
- 局部化修改 :
①高内聚低耦合、②预测变更、③使模块通用、④泛化模块、⑤维持语义的一致性、⑥限制可能的选择、⑦抽象通用服务 - 防止连锁反应 :
①隐藏信息、②维持现有接口、③限制通信路径、④使用仲裁者 - 推迟绑定时间 :
①运行时注册、②配置文件、③多态、④组件更换、⑤遵守已定义的协议
2.4 易用性
易用性关注的是对用户来说完成某个期望任务的容易程度和系统所提供的用户支持的种类。
例如:
- 界面友好
- 新用户学习使用系统时间不超过2小时
2.5 可测试性
软件可测试性是指通过测试揭示软件缺陷的容易程度。
例如:
- 提供远程调试接口,支持远程调试
2.6 可靠性
分为两个子属性:
容错性:出错后仍能保证系统争取运行,且自行修正错误。
健壮性:错误不对系统产生影响,按既定程序忽略错误。
2.7 功能性
需求的满足程度。
2.8 可变性
总体架构可变。
2.9 互操作性
通过可视化或接口方式提供更好的交互操作体验。
三、质量属性场景描述
质量属性场景是一种面向特定质量属性的需求,由刺激源、刺激、环境、制品、响应、响应度量组成。
(1)刺激源(Source):某个生成该刺激源的实体(人、计算机系统或者任何其他刺激器)。
(2)刺激(Stimulus):指当刺激到达系统时需要考虑的条件。
(3)环境(Environment):指该刺激在某些条件内发生。当激励发生时,系统可能处于过载、运行或者其他情况。
(4)制品(Artifact):某个制品被激励,可能是整个系统,也可能是系统的一部分。
(5)响应(Response):指在激励到达后所采取的行动。
(6)响应度量(Measurement):当响应发生时,应当能够以某种方式对其进行度量,以对需求进行测试。
四、系统架构评估
架构评估的基准是架构质量属性。
4.1 系统架构评估的重要概念
4.1.1敏感点、权衡点、风险点、非风险点
敏感点(Sensitivity Point) :是一个或多个构件(和/或构件之间的关系)的特性。
权衡点(Tradeoff Point) :是影响多个质量属性的特性,是多个质量属性的敏感点。
风险点(Risk Point ) :是指架构设计中潜在的、存在问题的架构决策所带来的隐患。
非风险点(Non-Risk Point ) :是指不会带来隐患,一般以“XXX要求是可以实现(或接受)的”方式表达。
例如:
- 对交易请求处理时间的要求将影响系统的数据传输协议和处理过程的设计(敏感点)
- 假设每秒中用户交易请求的数量是10个,处理请求的时间为30毫秒,则“在1秒内完成用户的交易请求”这一要求是可以实现的 (非风险点)
- 目前对系统信用卡支付业务逻辑的描述尚未达成共识,这可能导致部分业务功能模块的重复,影响系统的可修改性 (风险点)
- 更改加密的级别将对安全性和性能产生影响 (权衡点)
4.1.2 风险承担者或者相关利益人
影响体系结构或被体系结构影响的群体。
4.1.3 场景
确定架构质量评估目标的交互机制,一般采用触发机制(刺激)、环境和影响三方面来考虑。
4.2 系统架构评估方法
架构的评估方法通常分为3类:
-
基于调查问卷或检查表的评估方法
是指组织相关人员进行评估,这种方式最简单易行,但是主观性强。 -
基于度量的评估方法
强调量化指标,最客观,但是这种方式实施难度大,因为需要评估者对系统非常熟悉,不然很难量化清楚各项指标。 -
基于场景的评估方法
筛选出系统的关键场景,根据系统在不同场景中的表现进行评估,这种方式客观程度介于2者之间,这也是目前较为流行的结构评估方法。
基于场景的方式主要有三种(前2种方式用得比较多):
- 软件架构分析法(SAAM,Software Architecture Analysis Method)
- 架构权衡分析法(ATAM,Architecture Tradeoff Analysis Method)
- 成本效益分析法(CBAM,the Cost Benefit Analysis Method)
4.2.1 基于场景 - 软件架构分析法SAAM
SAAM,最初用于分析架构可修改性,后扩展到其它质量属性。
SAAM分析评估架构的过程包括5个步骤 ,如下图:
(1)场景开发
(2)架构描述
(3)单个场景评估
(4)场景交互评估
(5)整体评估
4.2.2 基于场景 - 架构权衡分析法ATAM
架构权衡分析法(ATAM,Architecture Tradeoff Analysis Method)是 在SAAM上发展而来。核心是结合质量属性效用树对系统进行评价 ,确定风险点、敏感点、权衡点,并对系统架构做出决策和折中。整个评估过程 强调以质量属性作为评估核心,主要针对性能、实用性、安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中。
ATAM分成4个阶段,如下图:
(1)场景和需求收集
(2)架构视图和场景实现
(3)质量模型构造和分析
(4)质量模型折中
4.2.3 质量属性效用树
质量属性效用树:识别质量属性并排序,主要包含性能、可用性、可修改性、安全性四个方面。
性能:性能延时(将用户数据库存储延迟到了最小值300ms,提供了实时的视频图像),交易吞吐量(使认证服务器的平均吞吐量最大化)。
可修改性:新增产品目录,商业产品修改(已小于20人月的工作量添加CORBA中间件,以小于4人周的工作量更改web界面)。
可用性:硬件故障(若站点A断电,要求在3秒内将任务重定向到站点B,若磁盘出现故障,要求在5分钟内重新启动,要在1-5分钟之内检测并恢复网络故障),商业软件故障。
安全性:数据机密性(信用卡交易在99.999%的时间内是安全的,客户数据库z认证在99.999%的时间内能正常工作),数据完整性。
质量属性效用树,示例图如下:
相关文章:

系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】
系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…...

魅族Pandaer手机壳
Pandaer的设计真是非常好看啊!像是手机壳的花样就特别多,还分出来很多系列,我比较喜欢它的亮面设计,入手了一款iPhone的,花色叫做“失控街头”,壳内部也是亮的,看起来特别浮夸,潮里潮…...

F5洞察2023年网络威胁,助力网络安全防护
2023已经过半,关于网络安全防护的相关讨论话题热度始终居高不下。对于网络安全领域的从业者来说,应当对相关的前瞻分析有所了解。前段时间,我阅读了F5 安全运营中心工程师对威胁网络安全的预测,深受启发,故此选取了几则…...

从零构建深度学习推理框架-4 框架中的算子注册机制
今天要讲的这一注册机制用到了设计模式中的工厂模式和单例模式,所以这节课也是对两大设计模式的一个合理应用和实践。KuiperInfer的注册表是一个map数据结构,维护了一组键值对,key是对应的OpType,用来查找对应的value,…...

使用vscode+ssh免密远程Linux
使用vscodessh免密远程Linux 使用 SSH 密钥对:使用 SSH Agent:ssh-agent的使用场景 使用 SSH 密钥对: 确保你的本地机器上已经生成了 SSH 密钥对。如果没有,请使用以下命令生成密钥对: ssh-keygen -t rsa这将在 ~/.ssh…...

rust-异步学习
rust获取future中的结果 两种主要的方法使用 async: async fn 和 async 块 async 体以及其他 future 类型是惰性的:除非它们运行起来,否则它们什么都不做。 运行 Future 最常见的方法是 .await 它。 当 .await 在 Future 上调用时,它会尝试把…...

【Azure】office365邮箱测试的邮箱账号因频繁连接邮箱服务器而被限制连接 引起邮箱显示异常
azure微软office365邮箱会对频繁连接自身邮箱服务器的IP地址进行,连接邮箱服务器IP限制,也就是黑名单,释放时间不确定,但至少一天及以上。 解决办法,换一个IP,或者新注册一个office365邮箱再重试。 以下是…...

重新登录成功和登录失败处理器
<template><div class="login"><el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"><h3 class="title">Java1234 Vue3 后台管理系统</h3><el…...

【Spring】(三)Spring 使用注解存储和读取 Bean对象
文章目录 前言一、使用注解储存 Bean 对象1.1 配置扫描路径1.2 类注解储存 Bean 对象1.2.1 Controller(控制器存储)1.2.2 Service(服务储存)1.2.3 Repository(仓库存储)1.2.4 Component(组件储存…...

ParallelCollectionRDD [0] isEmpty at KyuubiSparkUtil.scala:48问题解决
ParallelCollectionRDD [0] isEmpty at KyuubiSparkUtil.scala:48问题解决 这个问题出现在使用Kyubi Spark Util处理ParallelCollectionRDD的过程中,具体是在KyubiSparkUtil.scala文件的第48行调用isEmpty方法时出现的。该问题可能是由以下几个原因引起的࿱…...

---------------- 部署 Zookeeper 集群 ----------------
部署 Zookeeper 集群 1.安装前准备2.安装 Zookeeper修改配置文件在每个节点上创建数据目录和日志目录在每个节点的dataDir指定的目录下创建一个 myid 的文件配置 Zookeeper 启动脚本 //准备 3 台服务器做 Zookeeper 集群 192.168.109.1 192.168.109.2 192.168.109.3 1.安装前准…...

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁
😀前言 本篇博文是关于SpringBoot 依赖管理和自动配置,希望能够帮助到您😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您…...

c语言每日一练(2)
前言: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...

代码随想录第三十七天
代码随想录第三十七天 Leetcode 738. 单调递增的数字 Leetcode 738. 单调递增的数字 题目链接: 单调递增的数字 自己的思路:完全想不到!! 正确思路:大致思路是从后向前遍历,不可以从前向后,如果从前向后没有保证单调递增的顺序&…...

Linux进程间通信--ftok
在C语言中,ftok函数用于生成一个唯一的键值,该键值通常用于创建共享内存,消息队列和信号量等系统资源的标识符。 ftok函数原型入下: key_t ftok(const char *pathname, int proj_id); 参数说明: pathname:…...

Spring Boot集成Mybatis-Plus
Spring Boot集成Mybatis-Plus 1. pom.xml导包 <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql<…...

梳理日常开发涉及的负载均衡
负载均衡是当前分布式微服务时代最能提及的词之一,出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读,一对一的模式变得不再可信赖,千变万化的网络环境中,冗余和备份显得格外重要,稍大型的系统就会存在大量微服务…...

IEEE 754 浮点数运算
...

阿里巴巴Java开发手册学习记录
阿里巴巴Java开发手册学习记录 一、编程规约 1.命名风格 严禁使用英文 拼音混合使用 类名应所有单词的首字母大写,除了(UserDO,XxxDTO, XxxPo等) 常量的命名应该是大写 单词间用下划线连接 抽象类的应以Abstract/Base开头 …...

论文阅读---《Unsupervised T ransformer-Based Anomaly Detection in ECG Signals》
题目:基于Transformer的无监督心电图(ECG)信号异常检测 摘要 异常检测是数据处理中的一个基本问题,它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易,然而ÿ…...

收藏这8个好用的原型设计工具,轻松制作原型图
在设计工作中,原型设计是非常关键的一步,而原型设计工具又能帮助设计师更轻松地完成设计工作。今天本文将与大家分享8个好用的原型设计工具,一起来看看吧! 1、即时设计 即时设计是一个能在线协作的原型工具,也就是说…...

王道计网 第四章笔记
4.1 生活在网络层的“工人”是路由器,他负责各种异构网络的连接,但是因为他只生活在前三层所以从网络层之上的东西他不能管理,所以网路层之上的数据对于路由器来说必须是相同的、透明的。 常见的网络层协议有IP 和 ICMPTCP IP传输层协议FTP应用层协议一句话区分IP和MAC地址…...

C# Blazor 学习笔记(9):动态css/class绑定
文章目录 前言相关资料css和class绑定直接绑定间接绑定 前言 之前我们说到,我们组件化有三个目的。 不用写CSS不用写html不用写交互逻辑 为了解决第一个目的,我们需要动态css 相关资料 Blazor入手教程(二)css和class绑定 cs…...

vue3学习-Pinia状态管理
Pinia 定义一个Store import { defineStore } from pinia export const useStore defineStore(main, {})这个 name,也称为 id,是必要的,Pinia 使用它来将 store 连接到 devtools。 将返回的函数命名为 use… 是跨可组合项的约定࿰…...

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用
TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用 TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包, 融合并改进了NLP和CV中的多种知识蒸馏技术࿰…...

乍得ECTN(BESC)申请流程
根据TCHAD/CHAD乍得法令,自2013年4月1日起,所有运至乍得的货物都必须申请ECTN(BESC)电子货物跟踪单。如果没有申请,将被视为触犯乍得的条例,并在目的地受到严厉惩罚。ECTN是英语ELECTRONIC CARGO TRACKING NOTE的简称;…...

【100天精通python】Day28:文件与IO操作_JSON文件处理
目录 专栏导读 1. JSON数据格式简介 1.1 示例JSON数据 1.2 JSON文件的特点 2 json模块的常用操作 2.1 读写JSON文件的示例 2.2 解析JSON字符串 2.3 修改JSON数据 2.4 查询和操作嵌套数据 2.5 处理包含特殊字符的JSON文件 2.6 处理日期和时间 2.7 处理大型JSON文…...

配置两台数据库为主从数据库模式
一、主库配置 1、修改配置文件 /etc/my3306.cnf #mysql服务ID,保证整个集群环境中唯一,默认为1server-id1#是否只读,1代表只读,0代表读写read-only0#忽略的数据,指不需要同步的数据库#binlog-ignore-dbmysql#指定同步…...

linux允许root远程ssh登录
修改文件/etc/ssh/sshd_config # cat /etc/ssh/sshd_config ... #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ...将 #PermitRootLogin prohibit-password标注为: PermitRootLogin yes样例…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C++)
Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量(C) Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取数…...