论文 可靠性设计
概述
系统的可靠性分析与设计是系统架构设计师在系统分析与设计阶段、系统集成阶段应该重点考虑的问题。内容主要为可靠性设计、系统的故障模型、系统的可靠性模型、组合模型可靠性计算、马尔柯夫模型可靠性计算,以及硬件冗余、信息校验码等方面;另外也涉及系统可靠性分析与计算、系统可靠性评估和系统配置方法等概念与理论的实际工程运用等内容。
与可靠性相关的概念主要有:可靠度、可用度、可维度、平均无故障时间、平均故障修复时间及平均故障间隔时间等。
可靠度。系统的可靠度 R(t)是指在 t=0 时系统正常的条件下,系统在时间区间[0,t] 内能正常运行的概率。
平均无故障时间。可靠度为 R(t)的系统平均无故障时间(Mean Time To Failure,MTTF)定义为从 t=0 时到故障发生时系统的持续运行时间的期望值:
平均故障修复时间。可用度为 A(t)的系统平均故障修复时间(Mean Time To Repair,MTTR)可以用类似于求 MTTF的方法求得。
可靠性和可用性
系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。
系统可用性是指在某个给定时间点上系统能够按照需求执行的概率。
两者不同。
软件可靠性分析与设计的原因:
软件在使用中发生失效(不可靠)会导致任务的失败,甚至导致灾难性的后果。因此,应在软件设计过程中,对可能发生的失效进行分析,采取必要的措施避免将引起失效的缺陷引入软件,为失效纠正措施的制定提供依据,同时为避免类似问题的发生提供借鉴。
这些工作将会大大提高使用中软件的可靠性,减少由于软件失效带来的各种损失。
软件可靠性设计的四种类型:
避错设计
容错设计
改错设计
查错设计
避错设计
避错设计是使软件产品在设计过程中,不发生错误或少发生错误的一种设计方法。的设计原则是控制和减少程序的复杂性。
体现了以预防为主的思想,软件可靠性设计的首要方法。
各阶段都要进行避错。
避免需求错误,早期介入,使用原型提供客户决策。深入研究用户需求。
选择好的开发方法。
面向对象方法,分析、设计、实现。
软件避错设计准则:
模块独立,分治法。解耦。
信息隐蔽和局部分。(面向对象设计原则)
编码方面:防错程序设计,跳转。异常处理。
容错设计
软件容错设计是指在设计中赋予程序某种特殊的功能,使程序在错误已被触发的情况下,系统仍然具有正常运行能力的一种设计方法。
时间容错
所谓“时间容错”就是不惜以牺牲时间为代价来换取软件系统高可靠性的一种手段,它包括指令的重复执行和程序(一个模块或一个子程序)重复执行,两种常被采用而行之有效的方法
结构容错
结构容错的基本思想来源于硬件可靠性中的冗余技术。
静态冗余 -》 N版本程序设计法(NVP) 前向恢复 采用多个相同功能的N份程序同时运行,使用表决器进行最后结果的表决。版本的程序设计应该使用不同的方法,如不同的设计语言、不同的开发环境和工具。
动态冗余 -》恢复块法(RB) 后向恢复 设计时应该保证实现主块和备用块之间的独立性,使其不会相互影响。
信息容错
一对相同的要求进行多个不同版本的设计一对相同的初始条件和相同的输入的操作结果实行表决(多数决定、一致决定)
要求需求说明完全、精确
防卫式程序设计
对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误发生,程序能撤消错误状态,恢复到一个已知的正确状态中去
实现策略:错误检测、破坏估计、错误恢复
部署阶段:
双机容错 双机热备
数据库读写分离
集群
查错设计
软件查错设计是指在设计中赋予程序某些特殊的功能,使程序在运行中自动查找存在错误的一种设计方法。
被动式错误检测
设置检测点,等待错误出现。
软件看门狗
循环次数,避免潜在的死循环(有个解析协议错误,死循环)
检查数据有效性。
忽略极限条件
操作错误
变量下标错误
主动式错误检测
主动检查程序状态
cppcheck
故障恢复措施
完成恢复 降级恢复 立即停止程序运行,记录错误。
改错设计
改错设计是指在设计中,赋予程序自我改正错误、减少错误危害程度的能力的一种设计方法。
改正错误的前提是已经准确地找出软件错误的起因和部位(故障检测与故障定位合称故障诊断),程序又有能力修改、剔除有错误的语句。
现阶段仅限于减少软件错误造成的有害影响,或将有害影响限制在一个较小的范围。常采用故障隔离技术。
权限最小化原则。故障隔离。