软考高级架构师-系统可靠性分析与设计
2025.04.18题型主要是考论文写作。
可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。 可用性是系统能够正常运行的时间比例。
软件可靠性≠硬件可靠性
- 复杂性:软件复杂性比硬件高,大部分失效来自于软件失效。
- 物理退化:硬件失效主要是物理退化所致,软件不存在物理退化。
- 唯一性:软件是唯一的,每个COPY版本都一样,而两个硬件不可能完全一样。
- 版本更新周期:硬件较慢,软件较快。
系统可靠性分析
可靠性指标
- 平均无故障时间→(MTTF)系统无故障运行的平均时间。无故障运行时间(“健康”状态)。
- 平均故障修复时间→(MTTR)从出现故障到修复成功中间的这段时间。故障恢复时间(“修复”状态)。
- 平均故障间隔时间→(MTBF)MTBF=MTTR+MTTF
- 平均检测时间→(MTTD)故障发生到被检测出来的时间【潜伏期】。
系统可用性→MTTF/(MTTR+MTTF)×100%。
实际应用中,一般MTTR很小,所以通常认为MTBF≈MTTF。
串联系统与并联系统
串联系统功能不同,类似电路设计中的串联。系统中所有组件必须全部正常工作,整个系统才能正常运行。任一组件故障会导致整个系统失效。
可靠性计算公式为:
示例,一个由3个组件(可靠性分别为0.9、0.8、0.95)串联的系统,总可靠性为:R=0.9×0.8×0.95=0.0684(68.4%)。 可靠性随组件数量增加而急剧下降(乘法效应)。
并联系统功能相同,系统中至少有一个组件正常工作,整个系统即可运行。通过冗余设计提高可靠性,但成本较高。
可靠性计算公式为:
示例,两个冗余组件(可靠性均为0.8)并联的系统,总可靠性为:R=1-((1-0.8)*(1-0.8))=0.96(96%)。 可靠性随冗余组件数量增加而显著提升(指数效应)。
混合系统计算示例:
可靠性模型
可靠性模型大致可分为10类:
- 种子法模型:预先有意“播种”一些设定的错误“种子”,再看种子发现比例。 例如,提前预留10bug去测试,测试人员发现7个,则认为该系统整体还有30%的bug未被发现。
- 失效率类模型:如:Jelinski-Moranda的De-eutrophication模型、Schick-Wolverton模型。
- 曲线拟合类模型:用回归分析的方法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间。
- 可靠性增长模型:预测软件在检错过程中的可靠性改进,用增长函数来描述软件的改进过程。
- 程序结构分析模型:根据程序、子程序及其相互间的调用关系,形成一个可靠性分析网络。
- 输入域分类模型:选取软件输入域中的某些样本“点”运行程序,根据这些样本点在“实际”使用环境中的使用概率的测试运行时的成功/失效率,推断软件的使用可靠性。
- 执行路径分析方法模型:先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件的使用可靠性。
- 非齐次泊松过程模型:以软件测试过程中单位时间的失效次数为独立泊松随机变量,来预测在今后软件的某使用时间点的累计失效数。
- 马尔可夫过程模型:如:完全改错的线性死亡模型、不完全改错的线性死亡模型。
- 贝叶斯分析模型:利用失效率的试验前分布和当前的测试失效信息,来评估软件的可靠性。
软件可靠性设计
影响软件可靠性的因素
- 软件开发方法和开发环境。
- 运行环境。
- 软件规模。规模越小,可靠性越高。
- 软件内部结构。内部越复杂越容易出错。
- 软件的可靠性投入。投入越多,可靠性越高。
可靠性设计策略
- 避错技术。如将软件进行测试,测出问题后将其修正,但存在测试盲区,不能将其完全消除。
- 降低复杂度设计。
- 检错技术。发现错误后报警,人工处理,成本较低。
- 容错技术(重点)。出现错误,但是能包容错误,不会影响系统正常运行,一般使用冗余实现。 分为结构冗余(硬件软件冗余)、信息冗余(校验码)、时间冗余(重复多次进行相同计算)。
容错技术-N版本程序设计
N版本程序设计(N-version Programming,NVP)其核心思想是让多个独立开发的程序版本同时执行相同任务,通过结果比对或投票机制筛选出正确结果,从而降低单一版本错误导致系统失效的风险。
与通常软件开发过程不同的是,N版本程序设计增加了三个新的阶段:相异成分规范评审、相异性确认、背对背测试。 N版本程序的同步、N版本程序之间的通信、表决算法(全等表决、非精确表决、Cosmetie表决)、一致比较问题、数据相异性。
容错技术-恢复块方法
恢复块方法(Recovery Block Method)是一种软件容错技术,通过被动冗余和错误恢复机制来提高系统可靠性。其核心思想是“先执行主版本,若失败则切换备用版本”,依赖于接受测试(Acceptance Test)来判断主版本结果的正确性,而非多版本并行执行。
设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和备份块之间的共性错误降到最低程度。必须保证验证测试程序的正确性。
容错技术-防卫式程序设计
对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误发生,程序能撤销错误状态,恢复到一个已知的正确状态中去。
实现策略:错误检测、破坏估计、错误恢复。
容错技术-双机容错
双机容错技术是集群技术的前身,即用两台机器达到容错的目的。
双机的模式:
- 双机热备:1主1备,心跳相连,主服务器跑业务,备服务器待命,当检测到主服务器宕机时,备服务器自动启动,接管主服务器的任务。
- 双机互备:1主1备,心跳连接,同时提供不同的服务,两服务器互为备份。当某个服务器宕机时,另一个服务器自动启动,接管宕机的服务器的任务。
- 双机双工模式:1主1备,心跳连接,同时提供相同的业务,集群的一种。当某一服务器宕机时,另一个服务器自动启动,接管宕机的服务器的任务。