系统架构-软件可靠性
基本概念
软件可靠性是软件产品在规定的条件下和规定的时间内完成规定功能的能力
软件可靠性Vs硬件可靠性:
- 复杂性:软件复杂性比硬件高
- 物理退化:硬件会物理退化,软件不存在
- 唯一性:软件是唯一的,两个硬件不可能完全一样
- 版本更新周期:硬件慢,软件快
软件可靠性的定量描述:
- 规定时间:自然时间、运行时间、执行时间(占用CPU)(更准确)
- 失效概率:软件运行初始为0,随着时间增加,不断趋向于1
- 可靠度:1-失效概率
- 失效强度:单位时间软件的失效概率
- 平均失效前时间(MTTF):平均无故障时间,在失效前正常运行的时间
- 平均恢复前时间(MTTR):平均故障修复时间,发生故障之后的故障修复时间
- 平均故障间隔时间(MTBF):失效或维护所需的平均时间,MTBF = MTTF+MTTR
- 系统可用性 = MTTF/(MTTF+MTTR)*100%
串并联系统可靠性:
- 串联系统:一个设备不可靠,整个系统崩溃,整个系统可靠性R = R1*R2*……*Rn
- 并联系统:所有设备都不可靠,整个系统才会崩溃,整个系统可靠性R = 1-(1-R1)*(1-R2)*……*(1-Rn)
软件可靠性建模
软件可靠性模型是指为预计或估算软件的可靠性所建立的可靠性框图和数学模型
组成部分:
- 模型假设:假设出简化后的实际情况等
- 性能度量:软件可靠性模型的输出量就是性能度量
- 参数估计方法:某些可靠性度量无法直接获得,需要通过一定的方法估计参数的值
- 数据要求:一个软件可靠性模型要求一定的数据输入
常见的3个共同假设:
- 代表性假设:假设测试产生的可靠性数据能对实际软件运行情况有一定的代表性
- 独立性假设:假设一个软件的失效不影响另一个软件的失效
- 相同性假设: 假设软件失效的后果(等级)相同
软件可靠性设计
保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制
避错技术:通过技术评审、系统测试和正确性证明等技术,在系统运行之前避免、发现和改正错误
容错技术:在运行过程中发生一定的硬件故障或软件错误时,仍能保持正常工作而不影响正确结果。主要是采用冗余方法来消除故障的影响。主要的冗余技术有结构冗余(静态、动态、混合)、信息冗余、时间冗余和冗余附加4种
软件容错技术
N版本程序设计
静态结构冗余,其设计思想是用N个具有相同功能的程序同时执行一项计算,结构通过多数表决来选择。N个版本的程序必须由不同的人独立设计,使用不同的方法、设计语言、开发环境和工具来实现
恢复块设计(动态冗余)
动态冗余又称为主动冗余,其主要方式是多重模块待机储备,当系统检测到主的工作模块出现错误,就用一个备用的模块来替代它并重新运行
防卫式程序设计
不采用任何传统的容错技术就能实现软件容错的方法,防卫的基本思想是通过在程序种包含错误检查代码和错误恢复代码,使得一旦发生错误,程序能够自行修复
双机容错技术
是一种软硬件结合的容错方案,由两台服务器和一个外接共享磁盘阵列及相应的双机软件组成。
采用“心跳”方法:主从系统之间相互按照一定的时间间隔发送通信信号,表明各自系统当前的运行状态。一旦主系统出现故障,立即将系统资源转移到备用系统上。
工作模式:双机热备模式(备份机始终与主机保持同步,但备份机正常状态下不为用户提供任何服务);双机互备模式(主机和备用机为用户提供不同服务,两者间也始终保持同步);双机双工模式(主机和备用机为用户提供相同的服务,利用负载均衡的方法使两机共同工作)
集群技术
多台计算机组织起来进行协同工作,每台计算机均承担部分计算任务和容错任务。通过各计算机之间的负载转嫁机制完成新的负载分担。