🛡️ 系统可靠性设计

构建高可靠、容错的系统架构

可靠性基本概念

可靠性核心概念

可靠性定义

产品在规定的条件下和规定的时间内完成规定功能的能力,即系统无故障运行的概率。

成熟性: 避免因软件中的故障而导致失效
容错性: 在软件故障时维持规定的性能级别
易恢复性: 重新建立性能级别并恢复数据
依从性: 遵循可靠性相关的标准或约定

关键指标

MTTF (平均无故障时间)

MTTF = 1/失效率

MTTR (平均故障修复时间)

MTTR = 1/修复率

MTBF (平均故障间隔时间)

MTBF = MTTR + MTTF

故障来源

失效 (Failure)

系统不能执行要求的功能

故障 (Fault)

导致失效的异常条件

错误 (Error)

可能导致故障的系统状态

故障表现

永久性故障

持续存在的故障

间歇性故障

时有时无的故障

瞬时性故障

短暂出现的故障

故障模型

逻辑级

电路元器件出问题

数据结构级

二进制位出问题

软件级

软件设计出错

系统级

功能错误

容错技术

容错技术分类

按冗余类型分类

硬件冗余

使用额外的硬件组件

例:三模冗余表决器
软件冗余

使用多个软件版本

例:N版本程序设计
信息冗余

添加额外的信息位

例:海明校验码、CRC
时间冗余

重复执行操作

例:多次运行取结果

按实现方式分类

静态冗余

多模冗余,通过表决掩盖故障

  • • 三模冗余(TMR)
  • • 多数表决
  • • 故障掩盖
动态冗余

主动冗余,检测故障后切换

  • • 故障检测
  • • 故障定位
  • • 故障恢复
  • • 备用模块切换
混合冗余

结合静态和动态冗余

  • • 初期故障掩盖
  • • 后期故障切换
  • • 提高可靠性

单机容错

自检技术

系统自我诊断能力

冗余技术

重复线路/备份线路

双机容错

双机热备

主系统坏了,备用系统上

双机互备

平时各自提供不同服务

双机双工

同时提供相同服务

服务器集群

特点

  • • 可伸缩性
  • • 高可用性
  • • 可管理性
  • • 性价比
  • • 透明性

软件容错技术

N版本程序设计

核心思想

静态故障屏蔽技术,用N个相同功能的程序同时执行,结果通过多数表决选择

实现要求

  • • 不同规格需求说明书
  • • 不同团队独立开发
  • • 不同方法和工具
  • • 相同原始需求

特点

属于前向恢复技术

恢复块方法

核心思想

在程序运行的某时刻,将数据或程序进行备份,发现异常时恢复

实现机制

  • • 主程序块执行
  • • 验收测试检查
  • • 异常时恢复备份
  • • 执行备用块

特点

属于后向(反向)恢复技术

防卫式程序设计

核心思想

在程序中加入错误检测和处理代码,提高程序的健壮性

实现方式

  • • try-catch-finally
  • • 输入参数检查
  • • 边界条件检查
  • • 异常处理机制

应用场景

广泛应用于现代编程语言

备份与恢复

完全备份 (Full Backup)

特点

  • • 备份所有数据
  • • 恢复速度最快
  • • 占用存储空间最大
  • • 备份时间最长

适用场景

数据量不大,对恢复速度要求高

增量备份 (Incremental Backup)

特点

  • • 只备份变化的数据
  • • 备份时间最短
  • • 占用存储空间最小
  • • 恢复时间较长

恢复过程

需要完全备份+所有增量备份

差异备份 (Differential Backup)

特点

  • • 备份自上次完全备份后的变化
  • • 备份时间适中
  • • 存储空间适中
  • • 恢复时间适中

恢复过程

只需完全备份+最新差异备份

备份策略对比

备份类型 备份时间 存储空间 恢复时间 恢复复杂度
完全备份 简单
增量备份 复杂
差异备份 中等

灾难恢复等级

🔥

热备份

实时同步,立即切换

RTO: 秒级
🌡️

温备份

定期同步,快速切换

RTO: 分钟级
❄️

冷备份

离线备份,手动恢复

RTO: 小时级
📦

离线备份

磁带/光盘存储

RTO: 天级

可靠性计算

串联系统

特点

任何一个部件失效,整个系统就失效

可靠性计算

R(t) = R₁(t) × R₂(t) × ... × Rₙ(t)

系统可靠性 = 各部件可靠性的乘积

失效率

λ(t) = λ₁(t) + λ₂(t) + ... + λₙ(t)

并联系统

特点

所有部件都失效,系统才失效

可靠性计算

R(t) = 1 - [1-R₁(t)] × [1-R₂(t)] × ... × [1-Rₙ(t)]

系统可靠性 = 1 - 各部件不可靠性的乘积

特殊情况

当各部件可靠性相同时:R(t) = 1 - [1-R(t)]ⁿ

可靠性计算实例

例题1:串联系统

题目: 系统由3个部件串联组成,可靠性分别为0.9、0.8、0.95,求系统可靠性。
解答: R = 0.9 × 0.8 × 0.95 = 0.684

例题2:并联系统

题目: 系统由2个相同部件并联组成,每个部件可靠性为0.8,求系统可靠性。
解答: R = 1 - (1-0.8)² = 1 - 0.04 = 0.96

串联 vs 并联系统可靠性对比

容错技术实例

三模冗余(TMR)实例

系统架构

输入 模块A 模块B 模块C 表决器 输出

工作原理:

  • 三个相同的模块并行工作
  • 表决器对三个输出进行比较
  • 采用"多数表决"原则
  • 可以容忍一个模块故障

可靠性计算

假设条件
  • • 每个模块可靠性:R = 0.9
  • • 表决器可靠性:Rv = 0.99
  • • 模块故障相互独立
计算过程
系统正常工作条件:至少2个模块正常
P(3个正常) = R³ = 0.9³ = 0.729
P(2个正常) = C(3,2) × R² × (1-R) = 3 × 0.81 × 0.1 = 0.243
TMR可靠性 = (0.729 + 0.243) × 0.99 = 0.962
对比结果
单模块:0.9
TMR系统:0.962
可靠性提升:6.9%

软件容错技术对比