TOC
KINA

KINA-0

Start having fun with KINA right now!

系统架构核心知识(4):系统可靠性分析与设计

考点:

  • 可靠性相关基本概念 ⭐️⭐️
  • 系统可靠性分析 ⭐️⭐️⭐️⭐️
    • 可靠性指标
    • 可靠性计算
    • 系统可靠性模型
  • 软件可靠性设计 ⭐️⭐️⭐️⭐️

主考论文写作

1 可靠性相关基本概念辨析 ⭐️⭐️

可靠性与可用性辨析:

  • 可靠性(Reliability):软件系统在应⽤或系统错误⾯前,在意外或错误使⽤的情况下维持软件系统的功能特性的基本能⼒。
  • 可⽤性(Availability):系统能够正常运⾏的时间⽐例

软件可靠性 ≠ 硬件可靠性

软硬件对⽐:

  1. 复杂性:软件复杂性⽐硬件⾼,⼤部分失效来⾃于软件失效
  2. 物理退化:硬件失效主要是物理退化所致,软件不存在物理退化。
  3. 唯⼀性:软件是唯⼀的,每个COPY版本都⼀样,⽽两个硬件不可能完全⼀样。
  4. 版本更新周期:硬件较慢,软件较快。

2 系统可靠性分析 ⭐️⭐️⭐️⭐️

2.1 可靠性指标

可靠性指标 例

  • 平均⽆故障时间MTTF):系统⽆故障运⾏的平均时间,MMTF = 1 / λλ失效率
  • 平均故障修复时间MTTR):从出现故障到修复成功中间的这段时间,MTTR = 1 / μμ修复率
  • 平均故障间隔时间MTBF):MTBF = MTTR + MTTF
  • 系统可⽤性MTTF / (MTTR + MTTF) × 100%

在实际应⽤中,⼀般MTTR很⼩,所以通常认为 MTBF ≠ MTTF

【计算方法例】计算如图所示的平均无故障时间、平故障修复时间以及系统可用性。

【解】

  • 平均无故障时间:MTTF = (1000 + 800 + 600) / 3 = 800
  • 平均故障修复时间:MTTR = (3 + 1 + 2) / 3 = 2
  • 系统可用性:800 / (800 + 2) × 100%

2.2 可靠性计算

串联系统

  • 可靠性:R = R1 × R2 × ... × Rn
  • 失效率近似公式:λ = λ1 + λ2 + ... + λn(意义不大,仅供参考)

串联系统

并联系统

  • 可靠性:R = 1 - (1 - R1) × (1 - R2) × ... × (1 - Rn)

并联系统

N模混联系统:先将整个系统划分为多个部分串联,再计算各串联内部的并联可靠性,代⼊原公式。

  • 可靠性:R × (1 - (1 - R)^3) × (1 - (1 - R)^2)

N模

2.3 系统可靠性模型

可靠性模型⼤致可分为如下10类:

  1. 种⼦法模型:预先有意“播种”⼀些设定的错误“种⼦”,再看种⼦发现⽐例。
  2. 失效率类模型:如:Jelinski-Moranda的De-eutrophication 模型、Schick-Wolverton模型。
  3. 曲线拟合类模型:⽤回归分析的⽅法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间。
  4. 可靠性增⻓模型:预测软件在检错过程中的可靠性改进,⽤增⻓函数来描述软件的改进过程。
  5. 程序结构分析模型:根据程序、⼦程序及其相互间的调⽤关系,形成⼀个可靠性分析⽹络。
  6. 输⼊域分类模型:选取软件输⼊域中的某些样本“点”运⾏程序,根据这些样本点在“实际”使⽤环境中的使⽤概率的测试运⾏时的成功/失效率,推断软件的使⽤可靠性。
  7. 执⾏路径分析⽅法模型:先计算程序各逻辑路径的执⾏概率和程序中错误路径的执⾏概率,再综合出该软件的使⽤可靠性。
  8. ⾮⻬次泊松过程模型:以软件测试过程中单位时间的失效次数为独⽴泊松随机变量,来预测在今后软件的某使⽤时间点的累计失效数。
  9. ⻢尔可夫过程模型:例如完全改错的线性死亡模型、不完全改错的线性死亡模型。
  10. ⻉叶斯分析模型:利⽤失效率的试验前分布和当前的测试失效信息,来评估软件的可靠性。
  • ⼀个好的可靠性模型需要具备什么特性?
    • 答:⼀个好的软件可靠性模型应该具有如下重要特性:基于可靠的假设;简单;计算⼀些有⽤的量;给出未来失效⾏为的好的映射;可⼴泛应⽤。

3 软件可靠性设计 ⭐️⭐️⭐️⭐️

  • ⼴义的软件可靠性测试:为了最终评价软件系统的可靠性⽽运⽤建模、统计、试验、分析和评价等⼀系列⼿段对软件系统实施的⼀种测试。

  • 狭义的软件可靠性测试:为了获取可靠性数据,按预先确定的测试⽤例,在软件的预期使⽤环境中,对软件实施的⼀种测试。又称“软件可靠性试验”,是⾯向缺陷的测试,以⽤户将要使⽤的⽅式来测试软件,每⼀次测试代表⽤户将要完成的⼀组操作,使测试成为最终产品使⽤的预演。

  • 负载均衡是否算是提⾼可靠性的策略?提⾼可⽤性的策略是否也算是提⾼可靠性设计的策略?

    • 答:提⾼可靠性最主要的技术是检错技术、容错设计和降低复杂度设计。可靠性和可⽤性这两个质量属性是相互促进的作⽤。提⾼可⽤性的同时,间接在提⾼系统的可靠性,所以,他们的设计策略在⼀定程度上是有相互包含的。负载均衡在某些⻆度来看算是提⾼可靠性的策略。⽐如使⽤带有负载平衡的多个服务器组件,取代单⼀的组件,可以通过冗余提⾼可靠性。

3.1 影响可靠性的因素

按层级划分影响软件可靠性的主要因素:

  • 环境因素
    1. 软件的开发方法和开发环境
    2. 运行环境
  • 软件系统
    1. 软件规模
    2. 软件内部结构
    3. 软件的可靠性投入

影响可靠性的因素

3.2 可靠性设计技术

主动冗余与被动冗余:

  • 主动冗余:处理结点出故障之后,结点本身或控制器会协调没有出故障的结点提供处理服务。
  • 被动冗余:靠请求者⾃⼰完成上述⼯作,请求者若发现⼀台服务器不能正常提供服务,则转⽽找另⼀台服务器。

3.2.0 系统可靠性案例分析总结 ☀️☀️

可靠性的定义:系统在规定的时间内及规定的环境条件下,完成规定功能的能力,即系统无故障运行的概率。

根据国家标准《软件工程产品质量第1部分:质量模型》(GB/T16260.1-2006)的规定,系统可靠性包括如下4个子特性:成熟性容错性易恢复性可靠性的依从性

常用的可靠性设计技术:

  1. 避错技术
  2. 降低复杂度设计
  3. 检错技术:出错后报警。人工处理,成本较低。
    • 常见的实现方式:
      1. 判断返回结果:若返回结果超出正常范围, 则进行异常处理
      2. 计算运行时间:若某个模块或函数运行时间超过预期时间, 可判定其出现故障
      3. 置状态标志位(根据实际情况选用合适方法)
  4. 容错技术:使用冗余机制
    • 冗余的分类
      • 结构冗余:硬件冗余、软件冗余
      • 信息冗余:校验码
      • 时间冗余:重复多次进行相同的计算
    • 具体设计技术(图示详见对应节)
      • 恢复块设计:动态冗余;是一种反向恢复的方法,其核心原理是:对于可靠性要求高的软件,在程序运行的某时刻,将数据或程序进行备份,一旦发现主块有异常发生时,可将后备块中已备份的数据或程序进行恢复,保证程序的正确性。
      • N版本程序设计:静态冗余;是一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、设计语言、开发环境和工具来实现,目的是减少N个版本的程序在表决点上相关错误的概率。
      • ~防卫式程序设计~
对比内容 恢复块方法 N版本程序设计
硬件运行环境 单机 多机
错误检测方法 验证测试程序 表决
恢复策略 反向恢复 向前恢复
实时性

动态冗余又称主动冗余,它是通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。前者叫热备份系统(双重系统),后者叫冷备份系统(双工系统、双份系统)。

可靠性是实时系统的关键特性之一,区分软件的错误(Error)、缺陷(Defect)、故障(Fault)和失效(Failure)概念是软件可靠性设计工作的基础。错误、缺陷、故障和失效的定义如下:

  1. 软件错误:在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。
  2. 软件缺陷:存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。
  3. 软件故障:软件运行过程中出现的一种不希望或不可接受的内部状态。
  4. 软件失效:软件运行时产生的一种不希望或不可接受的外部行结果。

3.2.1 恢复块⽅法

恢复块方法

恢复块方法与N版本程序设计的区别在于存在主块后备块,验证输出时不再一起验证,而是改为先验主块,仅当主块测试不合格时才启用后背块,以此类推。属于前向恢复。

恢复⽅法分类:

  • 前向恢复:使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况(恢复块方法)
  • 后向恢复:系统恢复到前⼀个正确状态,继续执⾏(N版本程序设计)

恢复块⽅法与N版本程序设计对⽐:

恢复块方法 N版本程序设计
硬件运⾏环境 单机 多机
错误检测⽅法 验证测试程序 表决(少数服从多数)
恢复策略 后向恢复 前向恢复
实时性

设计时应保证实现主块和后备块之间的独⽴性,避免相关错误的产⽣,使主块和备份块之间的共性错误降到最低程度。

必须保证验证测试程序的正确性。

3.2.2 N版本程序设计

N版本程序设计

N版本程序设计的思想为由多个组独立开发各自的版本(通常部署在不同服务器上),用表决器表决这些版本(验证各版本的输出,其结果不一定相同),通常少数服从多数,选取出现次数最多的结果作为正确结果。属于后向恢复(定义见恢复块方法)。

可选的表决算法:

  • 全等表决
  • ⾮精确表决
  • Cosmetie表决

与通常软件开发过程不同的是,N版本程序设计增加了三个新的阶段:相异成份规范评审、相异性确认、背对背测试。

其他内容:N版本程序的同步、N版本程序之间的通信、⼀致⽐较问题、数据相异性

3.2.3 防卫式程序设计

防卫式程序设计对于程序中存在的错误和不⼀致性,通过在程序中包含错误检查代码和错误恢复代码,使得⼀旦错误发⽣,程序能撤销错误状态,恢复到⼀个已知的正确状态中去。(例如:try ... catch

实现策略:错误检测、破坏估计、错误恢复

3.3 双机容错

双机模式集群的前身(早期的集群;只有两台)。机器之间用心跳线相连。

双机容错

  • 双机热备模式:主系统、备⽤系统。仅一台机器运作,资源验证浪费。
  • 双机互备模式:同时提供不同的服务,⼼不跳则接管
  • 双机双⼯模式:同时提供相同的服务(各分50%任务),集群的⼀种

发表评论