软件架构---质量属性的实现
实现质量属性依赖于基本的设计决策,这种决策被称之为战术。
战术就是影响质量属性响应控制的设计决策,我们将战术的集合称之为"构架策略"
下面对于六种系统质量属性的战术进行总结
1.可用性战术
1)错误检测
广泛使用的3个战术是,命令/响应,心跳和异常
命令响应:一个组件发出一个命令,并希望在预定义的时间内收到一个来自审查组建的响应
心跳:一个组件定期发出一个心跳信息,另一个组件收听该信息,有时也可将传递数据作为心跳
异常:程序中常见的识别错误的方式
2)错误恢复
错误恢复由准备恢复和修复系统两部分组成。
常见的准备和修复战术有:表决,主动冗余(热重启),被动冗余(暖重启,双冗余,三冗余),备件,shadow操作,状态再同
步,检查点/回滚
3)错误预防
常见的错误预防战术有:
从服务中删除:删除系统一个组件,以执行某些活动来防止发生预期的故障
事务:将一系列的步骤绑定,使其单位化,执行则都执行,出错则全部撤销,来防止数据收到影响
进程管理器:一旦检测到进程中存在错误,监视进程就可以删除非执行进程,并为其创建一个新的实例
2.可修改性战术
控制可修改性战术是为了控制实现、测试和部署变更的时间和成本
根据目标可划分为:
1)局部化修改
目标是在设计期间为模块分配责任,以将预期的变更控制在一定的范围内。常见的有:
维持语义的一致性:例如抽象通用服务(示例:应用框架的使用和中间件软件的使用)
预期期望的变更:无法预期所有变更难以单独使用,通常结合语义一致性
泛化模块:模块越通用越有可能通过调整语言而非修改模块来进行请求的变更
限制可能的选择:限制可能的选择以降低影响
2)防止连锁反应
信息隐藏:就是把某个实体的责任分解为更小的部分,并选择哪些信息成为公有的,哪些成为私有的,通过接口获得公有责任。
维持现有的接口:尽可能维持现有接口的稳定性。例如通过添加接口(通过新的接口提供新的服务)可以达到这一目的。
限制通信路径:限制与一个给定的模块共享数据的模块。这样可以减少由于数据产生/使用引入的连锁反应。
仲裁者的使用:在具有依赖关系的两个模块之间插入一个仲裁者,以管理与该依赖相关的活动。仲裁者有很多种类型,例如:桥、调停者、代理等就是可以提供把服务的语法从一种形式转换为另一种形式的仲裁者。
3)推迟绑定时间
系统具备在运行时进行绑定并允许非开发人员进行修改(配置)
运行时注册:支持即插即用。
配置文件:在启动时设置参数。
多态:在方法调用的后期绑定。
构件更换:允许载入时绑定。
3.性能战术
性能与时间相关,影响事件的响应时间有两个基本因素。
资源消耗:事件到达后进入一系列的处理程序,每一步处理都要占用资源,而且在处理过程中消息在各构件之间转换,这些转换也需要占用资源。
闭锁时间:指对事件处理时碰到了资源争用、资源不可用或对其他计算的依赖等情况,就产生了等待时间。
性能的战术有如下几种
1)资源需求
减少处理事件流所需的资源:提高计算效率(如改进算法)、减少计算开销(如在可修改性与性能之间权衡,减少不必要的代理构件)。
减少所处理事件的数量:管理事件率、控制采样频率。
控制资源的使用:限制执行时间(如减少迭代次数)、限制队列大小。
2)资源管理
引入并发:引入并发对负载平衡很重要。
维持数据或计算的多个副本:C/S 结构中客户机 C 就是计算的副本,它能减少服务器计算的压力;高速缓存可以存放数据副本(在不同速度的存储库之间的缓冲)。
增加可用资源:在成本允许时,尽量使用速度更快的处理器、内存和网络。
3)资源仲裁
资源仲裁战术是通过如下调度策略来实现的。
先进/先出(FIFO);
固定优先级调度:先给事件分配特定的优先级,再按优先级高低顺序分配资源;
动态优先级调度:轮转调度、时限时间最早优先;
静态调度:可以离线确定调度。
4.安全性战术
1)抵抗攻击
对用户进行身份验证:包括动态密码、一次性密码、数字证书及生物识别等;
对用户进行授权:即对用户的访问进行控制管理;
维护数据的机密性:一般通过对数据和通信链路进行加密来实现;
维护完整性:对数据添加校验或哈希值;
限制暴露的信息;
限制访问:如用防火墙、DMZ 策略。
2)检测攻击
一般通过“入侵检测”系统进行,通过比较网络通信模式与数据库系统,在误检测的情况下将通信模式与已知攻击的历史模式进行比较
在异常检测的情况下,将通信模式与其本身的历史基线进行比较
3)从攻击中恢复
恢复:与可用性中的战术相同;
识别攻击者:作为审计追踪,用于预防性或惩罚性目的
5.可测试性战术
1)输入/输出
记录/回放:指捕获跨接口的信息,并将其作为测试专用软件的输入;
将接口与实现分离:允许使用实现的替代(模拟器)来支持各种测试目的;
优化访问线路/接口:用测试工具来捕获或赋予构件的变量值。
2)内部监视
内置监视器,监视器处于激活状态时,记录事件(如通过接口的信息)
6.易用性战术
1)运行时战术
任务的模型:维护任务的信息,使系统了解用户试图做什么,并提供各种协助;
用户的模型:维护用户的信息,例如使系统以用户可以阅读页面的速度滚动页面;
系统的模型:维护系统的信息,它确定了期望的系统行为,并向用户提供反馈。
2)设计时战术
将用户接口与其余部分分离,以应对测试过程中的频繁修改