系统可靠性分析与设计

可靠性相关概念与指标

基本概念

基础概念定义

  • 可靠性:指软件系统在面对应用错误、系统错误,或遭遇意外使用、错误使用的情况下,仍能维持自身功能特性的基本能力。
  • 可用性:衡量系统能够正常运行的时间比例,体现系统可被正常使用的时间占比。

软件可靠性与硬件可靠性的差异

  • 复杂性:软件复杂性高于硬件,且多数系统失效问题源于软件失效。
  • 物理退化:硬件失效主要由物理层面的老化、损耗等退化现象导致,而软件不存在物理退化问题。
  • 唯一性:软件具有唯一性,同一版本的所有复制(COPY)完全一致;硬件则无法做到个体完全相同。
  • 版本更新周期:硬件更新迭代速度较慢,软件更新迭代速度更快。

可靠性指标

可靠性指标定义

  • 平均无故障时间(MTTF)
    • 公式:MTTF = 1/λ(λ 为失效率),指系统在故障前正常运行的平均时间。
  • 平均故障修复时间(MTTR)
    • 公式:MTTR = 1/μ(μ 为修复率),表示系统发生故障后修复所需的平均时间。
  • 平均故障间隔时间(MTBF)
    • 公式:MTBF = MTTR + MTTF,即系统相邻两次故障间隔的平均时间,涵盖运行与修复时间。
  • 系统可用性
    • 公式:MTTF / (MTTR + MTTF) × 100%,反映系统正常运行时间在总时间(运行 + 修复)中的占比。

串联系统与并联系

串联系统

  • 结构:组件(R₁、R₂…Rₙ)依次连接,输入需经过所有组件才能输出,任一组件失效则系统失效。
  • 可靠性计算:总可靠性 $$R = R_1 \times R_2 \times \dots \times R_n$$,即各组件可靠性的乘积。
  • 失效率近似公式:总失效率 $$\lambda = \lambda_1 + \lambda_2 + \dots + \lambda_n$$,各组件失效率直接相加(适用于失效率较小时的近似计算)。

并联系统

  • 结构:组件(R₁、R₂…Rₙ)并行连接,只要至少一个组件正常,系统即可输出。
  • 可靠性计算:总可靠性 $$R = 1 - (1-R_1) \times (1-R_2) \times \dots \times (1-R_n)$$,通过计算 “所有组件均失效” 的概率,再用 1 减去该概率,得到系统正常工作的可靠性。

可靠性设计

影响软件可靠性的主要因素

  • 软件的开发方法和开发环境:科学的开发方法(如结构化开发、敏捷开发)与稳定的开发环境,直接影响软件编码质量与缺陷控制,是可靠性的基础。
  • 运行环境:软件运行依赖的硬件、操作系统、网络等环境的稳定性。若运行环境存在兼容性差、资源不足等问题,会降低软件可靠性。
  • 软件规模:软件规模越大,代码量与功能复杂度越高,潜在缺陷风险增加,对可靠性管理提出更高挑战。
  • 软件内部结构:合理的架构设计(如模块化、层次化)、代码规范性等内部结构因素,决定软件的可维护性与抗错误能力,直接影响可靠性。
  • 软件的可靠性投入:包括测试资源、质量保障技术、维护成本等投入。充足的投入(如严格测试、可靠性分析)能有效发现并解决问题,提升软件可靠性。

提升软件可靠性的技术方法

核心技术分类

  • 避错技术:从源头减少错误产生,提升软件可靠性。
  • 降低复杂度设计:通过简化软件结构,降低出错概率。
  • 检错技术:检测错误并报警,依赖人工后续处理,成本较低。
  • 容错技术:通过冗余机制,使系统在出错时仍能正常运行。

冗余机制(容错技术核心)

  • 结构冗余:包括硬件冗余(如备用硬件)和软件冗余(如多套软件模块)。
  • 信息冗余:通过校验码(如奇偶校验、CRC 校验)等额外信息检测和纠正错误。
  • 时间冗余:重复执行相同计算,通过多次运算对比结果,确保正确性。

容错技术具体方法

  • N 版本程序设计(静态冗余):开发多个不同版本程序并行运行,对比结果取一致输出。
  • 恢复块设计(动态冗余):设定主模块与多个备用模块,主模块失效时切换至备用模块。
  • 防卫式程序设计:在代码中嵌入检查机制,提前预判并处理可能的错误,增强系统容错能力。

可靠性设计 - N 版本程序设计

流程

  • 执行流程
    • 各版本程序并行运行,结果输入 “表决器”。
    • 表决器判断后,若结果一致则 “输出正确结果”,若异常则触发 “异常处理”,通过冗余设计提升系统容错能力。

核心要点

  • 新增开发阶段
    • 相比常规开发,N 版本程序设计增加三个阶段:
      • 相异成分规范评审:审核不同版本程序的相异设计是否符合规范。
      • 相异性确认:确保各版本程序在功能实现上的差异性,避免共性错误。
      • 背对背测试:独立测试各版本程序,验证其正确性与可靠性。
  • 关键技术要素
    • 涉及 N 版本程序的同步机制、版本间通信规则,以及多种表决算法(如全等表决、非精确表决、Cosmetie 表决),同时需处理版本间一致比较、数据相异性等问题,确保多版本协同工作的可靠性。

可靠性设计 - 恢复块方法

恢复块流程

  • 执行逻辑:
    1. 首先执行 “主块”,完成后进行 “验证测试”。
    2. 若测试合格,直接 “输出正确结果”;若不合格,切换至 “后备块 1”,再次执行并验证。
    3. 依此类推,直到后备块 k,若所有后备块验证均不合格,则触发 “异常处理”。

设计关键原则

  • 独立性:确保主块与后备块相互独立,降低共性错误风险。
  • 验证测试正确性:必须保证验证测试程序本身的准确性,否则无法有效判断模块输出。

恢复块方法与 N 版本程序设计对比(表格)

维度 恢复块方法 N 版本程序设计
硬件运行环境 单机 多机
错误检测方法 验证测试程序 表决
恢复策略 后向恢复(回退到前一正确状态) 前向恢复(继续当前计算,恢复连贯状态)
实时性

恢复策略补充

  • 前向恢复:使当前计算继续,将系统恢复为连贯的正确状态,弥补当前不连贯问题。
  • 后向恢复:系统回退到前一个正确状态,再继续执行。

可靠性设计-防卫式程序设计

  • 核心思想:针对程序中可能出现的错误与不一致性,在代码中嵌入错误检查代码错误恢复代码。一旦错误发生,程序可通过这些代码撤销错误状态,恢复到已知的正确状态,确保运行可靠性。
  • 实现策略:
    • 错误检测:识别程序运行中的错误,如输入异常、逻辑错误等。
    • 破坏估计:评估错误对程序状态的影响范围,判断错误严重程度。
    • 错误恢复:执行具体恢复操作,将程序状态回退或调整至正确状态,维持程序正常运行。

可靠性设计-双机容错

硬件组成

  • 服务器 A、B:通过 “心跳线” 互相监控状态,确保实时通信。
  • 共享磁盘阵列:为两台服务器提供共享存储,保证数据一致性。
  • 客户机:通过局域网连接服务器,获取服务。

双机容错模式

  1. 双机热备模式:
    • 分为主系统与备用系统,主系统正常运行时,备用系统处于待命状态;主系统故障时,备用系统接管服务。
  2. 双机互备模式:
    • 两台服务器同时提供不同服务,相互监控 “心跳”。若某台服务器心跳异常,另一台接管其服务,提升资源利用率与可靠性。
  3. 双机双工模式:
    • 两台服务器同时提供相同服务,属于集群的一种形式。通过并行处理增强系统处理能力,同时实现容错,保障服务连续性。

补充说明

  • 强调 “双机模式是集群的前身”,体现双机容错技术在分布式架构演进中的基础作用,为更复杂的集群技术提供可靠性设计思路。