52浙江大学王灿《软件体系结构》视频课程PPT5_可用性和可修改性设计.pptVIP

  • 4
  • 0
  • 约3.3千字
  • 约 25页
  • 2020-02-24 发布于江苏
  • 举报

52浙江大学王灿《软件体系结构》视频课程PPT5_可用性和可修改性设计.ppt

实现质量属性 (1) 实现质量属性 上节课讨论了各种系统质量属性,却没有谈及如何实现这些质量属性 质量属性的实现依赖于我们称之为“战术”的基本构架决策 给定一个质量属性,“战术”帮助构架师使用相应的构架策略或模式来进行设计,达成响应的质量属性 战术 什么使得不同的设计表现出不同的质量特性 可移植性 高性能 可集成性 “战术”是影响质量属性响应控制的设计决策 战术的集合 系统设计有决策集合组成 有些决策确保系统功能的实现 有些决策帮助控制质量属性-“战术” “战术”是构架师所使用的设计方法 战术示例 一个典型的战术示例是通过“引入冗余”来提高系统可用性 这往往意味着系统中要有响应的同步机制 该示例揭示 战术可以进一步的被精练 比如:冗余战术可以被进一步的被精练为数据冗余和计算冗余,通常我们以层次结构的形式组织战术 模式是战术的打包 可用性战术 可用性的回顾 定义 故障 VS. 错误 α = 平均正常工作时间 / (平均正常工作时间+ 平均修复时间) 可用性战术 将阻止错误发展成故障 或将错误影响限制在一定范围内,从而使修复成为可能 保持可用性的方法通常包括: 一些冗余 一些检测故障的监控机制 一些恢复机制 错误检测战术 命令/响应(Ping/echo) 层次形式组织的“命令/响应”错误检测机制 心跳 (“死人计时器”) 一个组件定时发出一个心跳消息,另一个组件接听该消息 异常/中断 通过抛出异常来识别错误,异常处理程序通常在同一进程内捕获并处理异常 错误恢复战术 错误恢复通常由两部分组成 准备恢复 恢复系统 常用的准备和恢复战术 表决 主动冗余 被动冗余 备件 重新引入 表决战术 (1) 运行在冗余处理器上的每个进程都具有相等的输入,它们计算发给表决器的一个简单的输出值。如果表决器检测到单个处理器的异常行为,那么就中止这一行为 常用的表决算法 多数规则 首选组件 表决战术 (2) 表决战术可以用于纠正算法的错误或处理器的错误,或者某个模块或组件的错误 如果出现故障会带来严重的后果,则冗余组件可能是多样的 每个冗余组件的软件由不同小组开发 在不同的平台上执行... 主动冗余(热启动)战术 所有冗余组件在启动的时候同步,以并行的方式对时间作出响应,因而它们都处在相同的状态。通常,作出响应的第一个组件的结果被采用,其他响应被丢弃 组件间的同步是通过将传递给任何冗余组件的消息发送给所有冗余组件 发生错误时,使用该战术的系统的停机时间通常是几毫秒 恢复时间就是组件间的切换时间,因为冗余组件间状态一致,备份都是最新的 在高可用性的分布式系统中,冗余可能在通信路径上 被动冗余战术 一个组件(主组件)对事件作出响应,并通知其他组件(备用组件)它们必须进行的状态更新 同步是主组件的责任,它可以通过对备用组件的原子广播来保证同步 当系统发生错误时 首先要确保备用组件的状态时最新的 该战术依赖与备用组件对工作进行可靠接管 备件战术 在备件战术中,配置有相应的备件平台来取代各种出故障的组件 当故障出现时,备件必须启动并进行相应的配置,对状态进行初始化,才能替代出故障的组件 进行同步并对故障的组件进行接管时,往往使用检查点(checkpoint)+日志(logging)的技术 重新引入战术 该战术依赖于对发生故障的组件进行纠正后的重新引入 shadow操作:以前出现故障的组件在短时间内以“shadow模式”(类似于测试模式)运行,以确保它能够胜任工作组件的要求 状态再同步:重新引入后,最好能用一条消息就将状态刷到最新 检查点/回滚:使用类似于数据库中的恢复机制的技术 错误预防战术 从服务中删除 从操作中删除系统的一个组件,以执行某些活动来防止预期发生的故障。例如:重新启动组件,以防内存泄漏导致故障发生 事务处理 几个有序步骤的绑定,是的这些步骤都能被完成或撤销,保证一致性,防止冲突 进程监视器 检测到进程中的错误后,将之删除并重新创建一实例并初始化状态 可用行战术层次结构 可修改性战术 目标:控制实施、测试和部署修改的时间和成本 局部化修改 (1) 一般来说(尽管不是非常精确),修改的模块越少,修改的成本就越低 这组战术的目标是在设计期间为模块分配责任,以把预期的变更限定在一定范围内 维持语义的一致性 语义一致性指模块中责任间的关系。目标是确保这些责任能够协同工作,不需过多依赖其他模块 “抽象通用服务” 预期期望的变更 考虑预想的变更为责任或功能的分配提供指导 实际使用中,该战术实施会有困难,因为很难预期所有变更 局部化修改 (2) 泛化模块 泛化模块(使一个模块更加通用)可以使它根据根据输入计算更广泛的功能 可以将一个模块的输入看成是该模块定义的一种语言 可以在语言上应对修改,而不必去修改模块 限制可能的选择 修改(尤其在产品线中

文档评论(0)

1亿VIP精品文档

相关文档