软件设计和结构体系

结构

模块结构 Module

将系统划分为执行单元,是静态结构,支持可修改性

decomposition 结构
分解结构,将模块分成多个子模块
uses 结构
使用结构,显示模块之间的相互使用关系
layer 结构
分层结构,如网络分5层,上层可以使用下层功能,但不能反过来
class 结构
类结构,有实例化,继承等关系
data model 结构
数据模块结构,如ER图(实体-关系图)的结构,可以用在数据库的管理等

C&C 结构 Component-and-connector

运行时互相作用以执行功能,动态结构,可以由UML图的序列图,活动图,状态图表示

service 结构
面向服务的结构
concurrency 结构
并发结构,如线程,进程

分配结构 Allocation

将软件结构映射到系统的环境中,包括硬件,文件,开发团队上

deployment 结构
部署结构,软件映射到硬件,用于软件的部署和迁移
implementation 结构
实现结构,软件映射到文件结构
work assign 结构
工作分配结构,软件的工作内容映射到开发团队上

质量属性

可用性 Availability

定义为系统正常运行的时间占比

前提:故障是“可修复”的
availability = MTBF/(MTBF+MTTR)
MTBF:平均故障间隔时间,全称Mean Time Between Failure
MTTR:故障发生到故障修复完成的时间

质量属性场景 Quality attributes Scenarios

通用场景:
在这里插入图片描述
质量属性表:
在这里插入图片描述

战术 Tactics

错误检测——用来检测故障的健康监视;
自动恢复——检测到故障时恢复;
错误预防——阻止错误演变为故障。

在这里插入图片描述
目的:软件能承受故障,交付的服务始终符合规范

可用性设计 Design

The design for availability include:

1.Allocation of responsibilities
2.Coordination model
3.Data model
4.Mapping among architectural elements
5.Resource management
6.Binding time
7.Choice of technology

总结

在这里插入图片描述

可部署性 Deployability

可部署性指在可预测且可接受的时间和精力范围内部署,新部署不符合时可回滚

质量属性场景 Quality attributes Scenarios

通用场景:
在这里插入图片描述
质量属性表:
在这里插入图片描述

战术 Tactics

1.可部署流水线pipeline:
规模递增(软件使用人数递增),脚本部署命令(软件部署过程代码化),回滚(恢复到先前状态)
2.可部署性系统system:
管理服务交互(避免版本不兼容),打包依赖(在不同环境中保持一致),切换功能(可以远程开关功能)

在这里插入图片描述
目的:减少部署时间,增加部署质量

设计模式 Patterns

1.为部署构建服务
微服务架构 (除了接口外没有其它连接)
服务完全代替 (在不降低服务质量的情况下进行服务代替)
服务部分代替

2.如何部署服务:
all-or-nothing(全部署或不部署) 或 partial(部分部署)

服务完全代替有基于模式的不同规模的两种战术:蓝绿部署,滚动升级
服务部分代替有两种战术:金丝雀测试,A/B测试

蓝绿部署:同时运行两个版本的应用(蓝色环境和绿色环境),并且这两个版本的应用实例规格和数量通常保持一致。
在升级过程中,不停止旧版本(蓝色环境)的服务,而是直接部署新版本(绿色环境)。
等待新版本测试通过后,将流量从旧版本切换到新版本。
如果新版本出现问题,可以快速将流量切回旧版本,实现快速回滚。

滚动升级:在不中断服务的情况下,对应用程序进行逐步升级。
在滚动升级中,不是一次性启动所有新版本的应用实例,而是逐步替换旧版本的应用实例。
每次替换一个或多个旧版本实例,并启动对应数量的新版本实例。
逐步替换直到所有旧版本实例都被新版本实例替换完毕。

金丝雀测试:在软件发布中用于提前发现潜在问题。
在金丝雀测试中,新功能或更新首先被推出到一小部分用户或服务器上(这部分被称为“金丝雀”环境)。
团队监控这部分用户或服务器的反馈和性能指标,以评估新功能或更新的稳定性和性能。
如果发现问题,可以立即停止发布并修复问题,避免影响更广泛的用户。

A/B测试:用于比较两个或多个版本的某个变量(如网站的标题、颜色、布局等),以确定哪个版本对于所测试的目标(如增加销售、提高转化率等)最有效。
在A/B测试中,随机分配的用户组被分为两个或多个组,每个组被展示不同版本的变量。
通过收集和分析每个组的行为和反馈数据(如点击率、转化率等),可以确定哪个版本的变量对实现目标最有效。

总结

在这里插入图片描述

可修改性 Modifiability

可修改性成本:引入可修改性的机制(提前布置让用户来修改),每一次修改源码的成本(开发人员来修改)

包含variability可变性(产品相关),Portability可移植性,Scalability可伸缩性(水平伸缩:增加硬件;垂直伸缩:增加软件资源)

对于N种类似的改动,比较改动成本的公式:
N x Cost1 <= Cost2 + (N x Cost3)
Cost1: 在没有机制的情况下进行更改的成本
Cost2: 建立机制的成本
Cost3: 使用机制进行更改的成本

更改的内容包括:
功能(添加/修改/删除),质量(可用性),容量(支持用户数),技术(将系统移植到不同计算机上)

质量属性场景 Quality attributes Scenarios

通用场景:
在这里插入图片描述
质量属性表:
在这里插入图片描述

战术 Tactics

可修改性涉及的因素:
1.模块的大小
2.耦合 Coupling(越低越好)
3.内聚 Cohesion(越高越好)
4.修改的绑定时间

3类战术:
增加内聚(功能越单纯,内聚越好)
减少耦合(减少功能之间的联系)
推迟绑定时间(早绑定:编译时确定功能,晚绑定:在运行时绑定)

在这里插入图片描述

总结

在这里插入图片描述

性能 Performance

性能与时间和资源有关
测量响应的值:latency; throughput; miss rate

质量属性场景 Quality attributes Scenarios

通用场景:
在这里插入图片描述
质量属性表:
在这里插入图片描述

战术 Tactics

影响响应时间的因素:
Processing time
Blocked time

在这里插入图片描述

总结

在这里插入图片描述

易用性 Usability

易用性体现:容易学习,使用方便,最小化错误影响,系统适应用户,增强用户使用信心

质量属性场景 Quality attributes Scenarios

通用场景:
在这里插入图片描述
质量属性表:
在这里插入图片描述

战术 Tactics

1.用户优先
取消 Cancel:被取消的命令必须终止,释放被取消命令使用的资源,通知正在与取消命令协作的组件
撤销 Undo
暂停 Pause/Resume
聚合 Aggregate:将较低级别的对象聚合成一个组,一起进行处理
2.系统优先
维持任务模型(系统预测用户将会做的事并提供帮助,如搜索时下方显示可能想搜索的词)
维持用户模型(系统学习用户的习概偏好,如输入法根据用户打字习惯提供字,视频软件根据用户偏好推流视频)
维持系统模型(确定预期的系统行为,以向用户提供反馈,如下载文件显示下载进度和预计花费时间)

在这里插入图片描述

总结

在这里插入图片描述

虚拟化

目的:共享资源和进行隔离
硬件资源:CPU(轮转分配),内存(分页分配),磁盘(磁盘控制器分配),网络连接(通过IP地址标识区别)

虚拟机

虚拟机镜像:运行虚拟机的代码,传输和启动较慢

type1
在这里插入图片描述
Hypervisor:操作系统
管理虚拟机(包括创建,监测,杀死虚拟机,管理虚拟机的生命周期)
管理虚拟机里的应用程序(超过虚拟机的部分,比如网络请求)
VM:虚拟机,即一个操作系统

type2
在这里插入图片描述
(方便模拟不同操作系统环境)

容器

相比虚拟机,传输和启动更快
一个容器里只有一个应用程序,程序结束容器停止
(也可见另一篇云和云AI的docker部分)

相关容器pods:之间可以紧密通信,如图容器1和容器2
在这里插入图片描述

(也可见另一篇云和云AI的云部分)
目的:按需使用资源
云基于虚拟化和分布式计算

云的失效与2种有关:
超时Timeout
长尾延时long tail latency(在网络或系统中,一部分请求需要比平均时间长得多的时间才能完成的现象。这些延迟较长的请求形成了“长尾”,影响了整体系统的响应速度和性能)

构架模式

构架是一组结构,结构由元素和元素之间的关系组成
构架由图来表达
构架模式也分为:模块 Module,C&C Component-and-connector,分配 Allocation

分层模式

分层模式:属于model模式,每层是一组高内聚的服务,自顶向下,分而治之,可以分别进行开发和维护
元素:层
关系:访问权限,高层单向访问低层
限制条件:1.软件全在层内 2.至少有2层 3.访问权限关系不能循环
支持的质量属性:可移植性Portability,可修改性Modifiability,重用性Reuse
缺点:增加层会增加系统成本和复杂性
层桥:较高层软件使用不相邻较低层的模块
例子:网络通信分层

Broker代理模式

代理模式:C&C模式,不关心服务如何实现,由Broker中介把相似的功能集结起来提供服务
元素:客户端,服务端,中介,客户端代理,服务端代理
关系:附着关系,通过中介连接客户端,服务端
限制条件:客户端只通过客户端代理连接中介,服务端只通过服务端代理连接中介
支持的质量属性:可修改性,可用性(背后有大量服务端),性能
缺点:增加复杂性,中介是单一故障点,并且难以测试,可能被攻击或产生延迟
例子:美团,携程

管道-过滤器模式

管道-过滤器模式:属于C&C模式
元素:管道,过滤器
关系:依附关系,过滤器与管道相互依附
限制条件:管道不能分叉,即一个管道只能将过滤器输出端口连接到过滤器输入端口,连接的过滤器必须就通过管道传输的数据达成一致
缺点:不适合交互系统,效率不高
例子:物联网设备(摄像头),影视app

P2P点对点模式

P2P模式:C&C模式,去中心化,每个设备既是服务端也是客户端
两种具体模式:
在这里插入图片描述
关系:服务器,客户端的请求/响应关系
缺点:需要有一定的规模
支持的质量属性:可扩展性,可用性,性能
例子:skype

Map-Reduce模式

Map-Reduce模式:映射并处理数据,进行大数据的处理
map:映射,例如分词;reduce:
元素:map, reduce
关系:分配关系
限制:reduce需要比较简单,数据需要处理成简单的词

设计模式

设计模式是软件设计经验的总结,目的是加强软件的重用性
开闭原则:在不改变原有代码的基础上扩展功能

创建型设计模式 creative

目的:分离使用和创建

工场模式 Factory pattern

类图,支持开闭原则
在这里插入图片描述

抽象工厂模式

通过增加一个工厂的生产种类,减少工厂数量
类图,不完全支持开闭原则
下面的例子抽象工厂模式只需要2个工厂,工厂模式需要4个工厂
在这里插入图片描述

单例模式 Singleton pattern

确保只有一个实例
构造函数是私有的,并增加一个静态方法用来创造第一个实例
(改变判断条件可以设计出只有2个实例,3个实例等等)
在这里插入图片描述

结构型设计模式 structrual

目的:把不同的对象结合起来形成更大的结构

组合模式 Composite pattern

leaf:执行者
component:父类
composite:组合,继承于父类,且聚合了父类
同等看待composite于leaf
安全型组合模式
在这里插入图片描述
透明型组合模式
在这里插入图片描述

适配器模式 Adapter pattern

需要达成Target接口的这些函数,已经有了Adaptee里的函数,于是增加Adapter在Adaptee的基础上增加缺少的函数
类适配器模式
在这里插入图片描述
对象适配器模式
需要多个Adaptee里的函数
在这里插入图片描述

行为型设计模式 behavioral

目的:构架对象之间的关联

迭代器模式 Iterator pattern

使用场景:使用访问器处理数据
数据是一个类Aggregate,访问器是另一个类Iterator,它们通过ConcreteAggregate与ConcreteIterator进行连接
在这里插入图片描述

命令模式 Command pattern

使用场景:在通过中间者Invoker沟通客户与执行者的基础上,使用commmand屏蔽命令的差异
client:消费者
receiver:任务执行者
invoker:中介
command:屏蔽所有命令的差异
在这里插入图片描述
流程图:
在这里插入图片描述

设计一个架构

设计策略
1.分解:包括功能和质量
2.设计ASR (Architecturally significant requirements 对架构产生重要影响的需求)
3.生成和测试:生成通常从已有软件,框架,构架模式,领域分解开始

ADD (attribute-driven design)方法,基于设计策略
前提 1.找到所有ASR 2.明确系统依附的环境
步骤
1.对项目进行分解,选择系统中一个元素
2.识别ASR,基于商业价值或架构相关等,一般由投票决定
3.生成并测试这个元素
4.把没有设计的部分继续完善

分解战术:1.广度Breadth优先 2.深度depth优先

把质量变成功能才能实现,如通讯加密功能是实现安全性的质量属性

架构评估

评估:自己评估,同行评估(需要呈现出设计),外部评估(需要提供商业目标等文件)
评估方法:ATAM,CBAM

ATAM

敏感点 sensitivity:设计决策,影响一个质量属性
权衡点 tradeoff:设计决策,影响多个质量属性
风险点 risk:可能产生坏的设计决策
无风险点 nonrisk:不会产生坏的设计决策

阶段1:选定人员,场地,评估资料,双方进行了解协商
阶段2:评估人员与决策人员参与
阶段3:评估人员,决策人员,架构人员参与
阶段4:呈现评估结果和商业目标
2,3阶段具体任务:
在这里插入图片描述

抽取质量属性场景,构建质量属性效用树,找到重要的质量属性进行评估
在这里插入图片描述

CBAM
除了产品本身外,还要考虑成本,收益和风险
在这里插入图片描述

效用响应曲线 Utility Response Curves 联系了成本(质量属性)和效益
在这里插入图片描述
在这里插入图片描述
B i B_i Bi对应第 i i i个设计决策的总收益
b i , j b_{i,j} bi,j对应第 i i i个决策的第 j j j个场景的收益 = 期望的收益 - 当前收益
W j W_j Wj是第 j j j个场景的权重
C i C_i Ci对应第 i i i个设计决策的成本
在这里插入图片描述
在这里插入图片描述

步骤
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值