# 软考架构师·高可用与业务连续性 专题总文档 > 覆盖:可用性理论(MTBF/MTTR/可用度/几个9/串并联可靠性)、冗余
软考架构师·高可用与业务连续性 专题总文档
覆盖:可用性理论(MTBF/MTTR/可用度/几个9/串并联可靠性)、冗余与故障切换(主备/双活/N+1/2N/冷温热备)、负载均衡与流量调度、数据可靠性(多副本/纠删码/RAID)、业务连续性管理(BCM/BCP/DRP/BIA/RPO/RTO)、灾备等级(GB/T 20988六级/同城双活/异地多活/两地三中心/三地五中心)、容灾技术(同步异步复制/CDP)、集群高可用(Quorum/脑裂/仲裁/Fencing)、稳定性防护(限流降级熔断隔离)、云原生高可用(多AZ/多Region/自愈)、选型权衡、易混陷阱、计算题型、双轨口诀、速记总表、背诵路线。
一、思维导图(全章概览)
高可用与业务连续性体系
├── 理论基石
│ ├── 可用性 A = MTBF / (MTBF + MTTR)
│ ├── 可靠性 R(t) = e^(-λt),λ = 1/MTBF
│ ├── 可用度等级:99%→99.9%→99.99%→99.999%→99.9999%(2~6个9)
│ ├── 串联系统:R = R1 × R2 × ... × Rn(越串越低)
│ ├── 并联系统:R = 1 - ∏(1 - Ri)(越并越高)
│ └── 混联:先并后串 / 先串后并
├── 冗余与故障切换
│ ├── 主备:冷备 / 温备 / 热备
│ ├── 双活:主主(Active-Active) / 负载分担
│ ├── 冗余配置:N+1 / 2N / N+M / 2N+1(仲裁)
│ └── 切换指标:RTO / RPO / 切换时间 / 数据丢失量
├── 负载均衡与流量调度
│ ├── DNS层:轮询 / 加权 / GeoDNS / GTM
│ ├── 硬件LB:F5 / A10 / Citrix NetScaler
│ ├── 软件LB:Nginx / HAProxy / LVS / Envoy
│ ├── 调度算法:轮询/加权/最少连接/IP_HASH/一致性Hash/P2C
│ └── 全局调度:Anycast / BGP / 多活DNS
├── 数据可靠性
│ ├── 多副本:3副本 / 主从 / Raft / Paxos
│ ├── 纠删码(EC):(k,m) 编码,存储开销 k/(k+m)
│ ├── RAID:0/1/5/6/10/01 — 条带/镜像/校验
│ └── WNR Quorum:R + W > N 强一致;W > N/2 写法定人数
├── 业务连续性管理(BCM)
│ ├── BIA 业务影响分析 → RTO/RPO 量化
│ ├── BCP 业务连续性计划
│ ├── DRP 灾难恢复计划
│ └── MTPD / SDO / WRT / MAD(时间链)
├── 灾备等级与架构
│ ├── GB/T 20988-2007 六级(1~6级)
│ ├── 同城双活(RPO≈0,RTO≈分钟级)
│ ├── 异地多活(RPO>0,RTO 分钟~小时)
│ ├── 两地三中心(同城双活+异地灾备)
│ └── 三地五中心 / 单元化部署
├── 容灾技术
│ ├── 数据级:存储复制(同步/异步)/CDP
│ ├── 数据库级:日志同步/逻辑复制/物理复制
│ ├── 应用级:应用切换/流量调度/全局路由
│ └── 复制模式:同步(RPO=0) / 异步(RPO>0) / 半同步
├── 集群高可用
│ ├── Quorum:多数派 > N/2
│ ├── 脑裂(Split-Brain):双主导致数据不一致
│ ├── 仲裁(Witness):奇数节点 / 外部仲裁盘
│ ├── Fencing / STONITH:隔离故障节点
│ └── Split-Brain 检测与预防
├── 稳定性防护
│ ├── 限流:计数器/滑动窗口/漏桶/令牌桶
│ ├── 熔断:Closed/Open/Half-Open 三态
│ ├── 降级:有损服务 / 兜底 / 静态化
│ ├── 隔离:线程池/信号量/舱壁模式
│ └── 超时/重试/背压/退避
├── 云原生高可用
│ ├── 多AZ / 多Region / 跨可用区调度
│ ├── 健康检查:Liveness / Readiness / Startup Probe
│ ├── 自愈:重启/驱逐/重建/滚动更新
│ ├── 弹性:HPA / VPA / Cluster Autoscaler
│ └── 调度策略:反亲和 / PodDisruptionBudget / 拓扑分布
├── 选型比较(横向对比表)
├── 易混陷阱(易混淆点辨析)
├── 避坑实践(生产实践注意事项)
├── 计算题型(串并联/RTO-RPO/冗余度/副本数)
├── 关联图(知识点关系图)
├── 双轨口诀(顺口溜+谐音两种记忆口诀)
└── 速记总表(考前速查表)
二、理论基石:可用性与可靠性
2.1 核心定义
| 指标 | 全称 | 定义 | 公式 |
|---|---|---|---|
| MTBF | Mean Time Between Failures | 平均无故障时间(两次故障间的平均时间) | MTBF = 总正常运行时间 / 故障次数 |
| MTTR | Mean Time To Repair | 平均修复时间(故障到恢复的平均时间) | MTTR = 总停机时间 / 故障次数 |
| MTTF | Mean Time To Failure | 平均故障前时间(不可修系统到首次故障) | MTTF = 总运行时间 / 故障次数 |
| A | Availability | 可用性/可用度 | A = MTBF / (MTBF + MTTR) |
| R(t) | Reliability | 可靠性(t时刻仍正常工作的概率) | R(t) = e^(-λt),λ = 1/MTBF |
| λ | Failure Rate | 故障率 | λ = 1/MTBF |
关键区别:
- 可用性(A) 是长期统计的"时间比例",关注"能用的比例"。
- 可靠性® 是"在规定时间 t 内不出故障的概率",关注"不出故障"。
- 高可用不一定高可靠:频繁故障但快速恢复 → 可用性高,可靠性低。
2.1.1 MTTF、MTBF、MTTR 三者关系详解
三者定义对比:
| 指标 | 适用系统 | 时间起点 | 时间终点 | 含义 |
|---|---|---|---|---|
| MTTF | 不可修复系统 | 系统启动/上次恢复 | 首次故障 | 到首次故障的平均运行时间 |
| MTBF | 可修复系统 | 上次故障恢复 | 下次故障发生 | 两次故障之间的平均间隔时间 |
| MTTR | 可修复系统 | 故障发生 | 修复完成 | 故障到恢复的平均修复时间 |
时间线图示:
可修复系统时间线:
|←── MTTF ──→|←MTTR→|←── MTTF ──→|←MTTR→|←── MTTF ──→|
| 正常运行 | 修复 | 正常运行 | 修复 | 正常运行 |
|←──────── MTBF(严格) ────────→| (含修复的完整周期)
不可修复系统时间线:
|←────── MTTF ──────→|×(报废,不修复)
| 正常运行 |
核心关系式:
对于可修复系统,一个完整的"运行→故障→修复"周期中:
- 正常运行时间 = MTTF
- 修复时间 = MTTR
- 完整周期 = MTTF + MTTR = MTBF(严格定义下)
两种定义体系对比:
| 体系 | MTBF 的定义口径 | 可用性公式 | 说明 |
|---|---|---|---|
| 严格定义(可靠性工程) | MTBF = MTTF + MTTR(含修复的完整周期) | A = MTTF / MTBF | MTTF 是纯运行时间,MTBF 是完整周期 |
| 软考常用定义 | MTBF = 平均无故障工作时间(不含修复,纯运行) | A = MTBF / (MTBF + MTTR) | MTBF 是纯运行,MTBF+MTTR 才是完整周期 |
考试关键:两种体系本质等价,只是 MTBF 的定义口径不同:
- 严格定义:MTBF 含修复 → A = MTTF / MTBF = MTTF / (MTTF + MTTR)
- 软考常用:MTBF 不含修复 → A = MTBF / (MTBF + MTTR)
- 软考答题优先用 A = MTBF / (MTBF + MTTR),除非题目明确给出 MTTF。
可用性公式的统一理解:
无论用哪种符号,本质都是"能正常工作的时间占总时间的比例"。
不可修复 vs 可修复系统:
| 维度 | 不可修复系统 | 可修复系统 |
|---|---|---|
| 适用指标 | 只有 MTTF | MTBF、MTTR(及 MTTF) |
| 故障后 | 报废/更换,不修复 | 修复后继续使用 |
| 可靠性 | R(t) = e^(-λt),λ = 1/MTTF | R(t) = e^(-λt),λ = 1/MTBF |
| 可用性 | 不适用(故障后不再运行) | A = MTBF / (MTBF + MTTR) |
| 典型 | 灯泡/一次性芯片 | 服务器/数据库/网络设备 |
易混提醒:
- MTTF 用于不可修复系统(到首次故障),MTBF 用于可修复系统(故障间隔)。
- 不可修复系统谈不上"可用性"(坏了就没了),只有"可靠性"。
- 可修复系统的故障率 λ = 1/MTBF(严格定义下 λ = 1/(MTTF+MTTR))。
2.2 可用度等级(几个9)
| 等级 | 可用度 | 年停机时间 | 月停机时间 | 典型场景 |
|---|---|---|---|---|
| 2个9 | 99% | 3.65 天 | 7.2 小时 | 个人博客/测试环境 |
| 3个9 | 99.9% | 8.76 小时 | 43.8 分钟 | 一般企业应用 |
| 4个9 | 99.99% | 52.6 分钟 | 4.38 分钟 | 核心业务系统 |
| 5个9 | 99.999% | 5.26 分钟 | 26.3 秒 | 电信/金融核心 |
| 6个9 | 99.9999% | 31.5 秒 | 2.63 秒 | 极端关键系统 |
速记:年停机时间 ≈ (1 - A) × 365 × 24 × 60 分钟。
- 3个9 → 8.76h ≈ 525分钟
- 4个9 → 52.6分钟
- 5个9 → 5.26分钟
- 每多一个9,年停机时间缩小约10倍。
2.3 串联系统可靠性
串联:所有部件都正常,系统才正常。任一故障 → 系统故障。
- 串联越多,可靠性越低。
- 两个 0.9 串联:R = 0.9 × 0.9 = 0.81
可用性同理:
2.4 并联系统可靠性
并联(冗余备份):至少一个正常,系统就正常。全部故障 → 系统故障。
- 并联越多,可靠性越高。
- 两个 0.9 并联:R = 1 - (1-0.9)² = 1 - 0.01 = 0.99
n个相同部件并联:
2.5 混联系统
| 模式 | 结构 | 计算方法 |
|---|---|---|
| 先并后串 | 并联组再串联 | 先算各并联组 R,再相乘 |
| 先串后并 | 串联组再并联 | 先算各串联组 R,再并联 |
考试技巧:化简混联 → 逐步用串/并联公式合并 → 最终得一个等效 R。
2.6 k/n 表决系统(G系统)
k/n 表决:n 个部件中至少 k 个正常,系统才正常。
- 并联 = 1/n 表决(至少1个正常)
- 串联 = n/n 表决(全部正常)
- 常见 2/3 表决:3节点集群,多数派(≥2)正常即可用
2/3 表决(R=0.9):
重要结论:2/3 表决(0.972) > 单节点(0.9),但 < 3并联(0.999)。表决系统在提高可靠性的同时兼顾一致性。
三、冗余与故障切换
3.1 主备模式分类
| 模式 | 备机状态 | 切换时间(RTO) | 数据丢失(RPO) | 成本 | 适用场景 |
|---|---|---|---|---|---|
| 冷备 | 关机,不运行 | 小时~天级 | 可能丢失全部增量 | 低 | 非关键/仅兜底 |
| 温备 | 运行但不承载流量,数据定期同步 | 分钟~小时级 | 同步周期内的增量 | 中 | 一般业务 |
| 热备 | 运行且实时同步数据,随时可切 | 秒~分钟级 | ≈0(近实时) | 高 | 核心业务 |
| 双活(主主) | 同时承载流量,互为备份 | ≈0(无切换) | 0 | 最高 | 极核心/金融 |
冷→温→热→双活:RTO 递减,RPO 递减,成本递增。
3.1.1 主动冗余 vs 被动冗余
主动冗余(Active Redundancy):所有冗余部件同时运行,共同承担负载。
被动冗余(Passive Redundancy / Standby Redundancy):冗余部件处于待命/备用状态,仅当主部件故障时才接管。
| 维度 | 主动冗余(Active) | 被动冗余(Passive/Standby) |
|---|---|---|
| 运行状态 | 所有部件同时运行 | 仅主部件运行,备件待命 |
| 别名 | 热冗余 / 并行冗余 | 冷冗余 / 备用冗余 |
| 对应模型 | 并联系统 | 主备/备份系统 |
| 负载承担 | 共同分担负载 | 备件不承担(故障时接管) |
| 切换 | 无需切换(都在运行) | 需故障检测+切换 |
| RTO | ≈0(无切换延迟) | >0(有切换时间) |
| 资源利用率 | 高(全部参与工作) | 低(备件闲置) |
| 并发问题 | 有(需解决数据一致性/写冲突) | 无(单点写入) |
| 实现难度 | 高(需共识/同步/负载分担) | 低(主→备单向同步) |
| 成本 | 高 | 较低 |
| 可靠性计算 | R = 1 - ∏(1-Ri)(并联公式) | R = R主 + (1-R主)×R切换×R备 |
| 典型场景 | 双活集群/负载均衡/多副本读写 | 主备数据库/冷温热备 |
可靠性计算对比:
主动冗余(并联)——所有部件同时工作,任一正常系统即正常:
例:2个部件 R=0.9 主动冗余 → R = 1-(1-0.9)² = 0.99
被动冗余(备用)——主部件工作,故障后切换到备部件:
例:主 R=0.9,备 R=0.9,切换成功率 R切换=0.95
R = 0.9 + (1-0.9)×0.95×0.9 = 0.9 + 0.0855 = 0.9855
若切换完全可靠(R切换=1):R = 0.9 + 0.1×0.9 = 0.99(与主动冗余相同)
关键区别:
- 主动冗余无需切换,可靠性纯由部件可靠性决定。
- 被动冗余需切换,可靠性还取决于切换成功率,切换失败则系统失效。
- 当切换完全可靠(R切换=1)时,主动冗余 = 被动冗余(可靠性相同)。
- 实际中切换不可能100%可靠,故主动冗余可靠性 ≥ 被动冗余。
主动冗余的典型实现:
- 负载均衡集群:Nginx/LVS 后端多台服务器同时服务
- 双活数据中心:两个中心同时承载流量
- 多副本读写:数据库多副本同时提供读服务
- Anycast:多节点同一IP,就近接入
被动冗余的典型实现:
- 主备数据库:MySQL主从、Oracle DG(主备模式)
- VIP漂移:Keepalived/VRRP 主备切换
- 冷温热备:备机待命,故障时接管
- 集群主从:Redis Sentinel主从切换
选型决策:
┌─ RTO≈0 且能解决一致性 → 主动冗余(双活/负载均衡)
│
要求 ──────┤─ RTO>0 可接受 且 追求简单 → 被动冗余(主备)
│
└─ 成本敏感 且 非核心 → 被动冗余(冷备/温备)
考试要点:
- 主动冗余对应并联可靠性模型,被动冗余对应主备模型。
- 主动冗余的可靠性公式不含切换成功率,被动冗余的公式含切换成功率。
- 主动冗余的核心挑战是数据一致性/写冲突,被动冗余的核心挑战是切换可靠性/切换延迟。
3.2 冗余配置模式
| 模式 | 含义 | 最小冗余 | 典型应用 |
|---|---|---|---|
| N+1 | N个工作 + 1个备份 | 1个备机 | 中间件/数据库主备 |
| N+M | N个工作 + M个备份 | M个备机 | 高要求场景 |
| 2N | 每个工作节点都有独立备份 | N个备机 | 严格隔离/双机房 |
| 2N+1 | 2N个 + 1个仲裁 | 1个仲裁节点 | 集群仲裁/避免脑裂 |
N+1 vs 2N:
- N+1:共享备份,成本低,但备份单点故障时全部失效。
- 2N:独立备份,隔离性强,成本翻倍。
3.3 Active-Active(双活/主主)vs Active-Standby(主备)
| 维度 | Active-Standby(主备) | Active-Active(双活) |
|---|---|---|
| 流量承载 | 仅主节点 | 所有节点同时承载 |
| 资源利用率 | 备节点闲置,~50% | ~100% |
| 切换 | 需显式Failover | 无切换,流量自动转移 |
| RTO | 秒~分钟 | ≈0 |
| 数据一致性 | 主→备单向同步 | 双向同步/分布式共识 |
| 实现难度 | 较低 | 高(需解决写冲突) |
| 成本 | 较低 | 高 |
3.4 故障切换(Failover)关键步骤
故障检测 → 仲裁确认 → 资源切换 → 流量重路由 → 数据修复 → 故障恢复
| 步骤 | 关键参数 | 常见机制 |
|---|---|---|
| 故障检测 | 心跳超时 | Heartbeat / Health Check / Gossip |
| 仲裁确认 | Quorum投票 | 多数派 / Witness节点 / 仲裁服务 |
| 资源切换 | VIP漂移 / DNS切换 | Keepalived(VRRP) / DNS / GTM |
| 流量重路由 | 路由更新 | BGP / Anycast / 负载均衡健康检查 |
| 数据修复 | 增量同步 | 日志回放 / CDP / 全量+增量 |
四、负载均衡与流量调度
4.1 负载均衡分层
| 层级 | 技术 | 特点 |
|---|---|---|
| DNS层 | DNS轮询 / GeoDNS / GTM | 全局入口,粒度粗,TTL延迟 |
| 网络层(L4) | LVS(DR/TUN/NAT) / F5 | 基于IP+端口,性能高,不感知应用 |
| 应用层(L7) | Nginx / HAProxy / Envoy | 基于URL/Header/Cookie,灵活,性能略低 |
| 全局调度 | Anycast / BGP / 多活DNS | 跨Region调度,就近接入 |
4.2 调度算法
| 算法 | 说明 | 适用场景 |
|---|---|---|
| 轮询(RR) | 依次分配 | 服务器性能相同 |
| 加权轮询(WRR) | 按权重分配 | 服务器性能不同 |
| 最少连接(LC) | 分配给连接数最少的 | 长连接/请求耗时差异大 |
| 加权最少连接(WLC) | 权重+连接数综合 | 通用 |
| IP Hash | 同IP固定到同一后端 | 会话保持(有状态) |
| 一致性Hash | 节点增减时最小迁移 | 缓存/分片路由 |
| P2C(Power of Two Choices) | 随机选2个取较优 | 大规模、低开销 |
| 最快响应 | 分配给响应最快的 | 对延迟敏感 |
4.3 LVS 三种工作模式
| 模式 | 原理 | 后端可见性 | 性能 | 适用 |
|---|---|---|---|---|
| NAT | LB修改目标IP,响应经LB返回 | 后端无需公网IP | 中(LB是瓶颈) | 小规模 |
| DR(直连路由) | LB改MAC地址,后端直接响应客户端 | 后端需与LB同网段 | 高(响应不经LB) | 大规模 |
| TUN(IP隧道) | LB封装IP隧道,后端直接响应 | 后端可跨网段 | 高 | 跨机房 |
考试要点:DR 模式响应不经过 LB,性能最好但要求同网段;TUN 可跨网段但需支持IP隧道。
4.4 健康检查机制
| 类型 | 检查内容 | 示例 |
|---|---|---|
| TCP检查 | 端口是否可连 | tcp_connect:8080 |
| HTTP检查 | HTTP响应码/内容 | GET /health 期望 200 |
| 自定义脚本 | 执行脚本判断 | 检查DB连接+磁盘+内存 |
| 被动检查 | 根据请求失败率自动标记不健康 | 连续N次失败 → 摘除 |
五、数据可靠性
5.1 多副本(Replication)
| 策略 | 副本数 | 写入要求 | 一致性 | 存储开销 |
|---|---|---|---|---|
| 单副本 | 1 | 写1即可 | 强 | 1x |
| 2副本 | 2 | 写2 | 强(需都成功) | 2x |
| 3副本 | 3 | 写多数(≥2) | Quorum强一致 | 3x |
| WNR Quorum | N | 写W读R | R+W>N→强一致 | Nx |
5.2 Quorum(WNR)机制
N = 副本总数,W = 写成功所需副本数,R = 读成功所需副本数。
| 条件 | 一致性保证 |
|---|---|
| W + R > N | 强一致性(读写必有交集) |
| W > N/2 | 写法定人数(同一时刻只有一个写成功) |
| R > N/2 | 读法定人数(读到最新写入) |
| W + R ≤ N | 可能读到旧数据(弱一致/最终一致) |
典型配置:N=3, W=2, R=2 → 强一致,容忍1节点故障。
高可用读:N=3, W=3, R=1 → 写需全部成功,读容忍2节点故障。
5.3 纠删码(Erasure Coding, EC)
EC(k, m):将数据分为 k 个数据块 + m 个校验块,共 k+m 个块,容忍任意 m 个块丢失。
| 维度 | 多副本(3副本) | EC(4,2) | EC(6,3) |
|---|---|---|---|
| 存储开销 | 3x | 1.5x (6/4) | 1.5x (9/6) |
| 容错能力 | 容忍2块丢失 | 容忍2块丢失 | 容忍3块丢失 |
| 读性能 | 高(直接读) | 中(需计算) | 中 |
| 写性能 | 高 | 低(需编码) | 低 |
| 适用 | 热数据/随机读写 | 冷数据/归档 | 大规模冷存储 |
EC 核心优势:相同容错能力下,存储开销远低于多副本。HDFS EC、Ceph EC、对象存储冷数据常用。
5.4 RAID 级别
| 级别 | 结构 | 最少盘数 | 容错 | 可用容量 | 读写性能 | 适用 |
|---|---|---|---|---|---|---|
| RAID 0 | 条带 | 2 | 不容错 | 100% | 最高 | 临时数据/性能优先 |
| RAID 1 | 镜像 | 2 | 容1盘 | 50% | 读高写中 | 系统盘/关键数据 |
| RAID 5 | 条带+分布式校验 | 3 | 容1盘 | (n-1)/n | 读高写低 | 通用/小规模 |
| RAID 6 | 条带+双校验 | 4 | 容2盘 | (n-2)/n | 读高写更低 | 大规模/可靠性优先 |
| RAID 10 | RAID1+0(镜像再条带) | 4 | 每镜像组容1盘 | 50% | 读高写高 | 数据库/高性能 |
| RAID 01 | RAID0+1(条带再镜像) | 4 | 每条带组容1盘 | 50% | 读高写高 | 较少用 |
RAID 10 vs RAID 01:
- RAID 10:先镜像再条带。容错取决于镜像组分布,实际可靠性更高。
- RAID 01:先条带再镜像。一个条带组全坏则整体失效。
- 考试结论:RAID 10 可靠性 > RAID 01,生产环境优先 RAID 10。
5.5 RAID 5/6 校验原理
- RAID 5:异或(XOR)校验,分布式校验盘(校验信息轮流分布在各盘)。
- RAID 6:双重校验(Reed-Solomon 码),可恢复任意2盘同时故障。
六、业务连续性管理(BCM)
6.1 BCM 体系框架
BCM 业务连续性管理
├── BIA 业务影响分析(前置)
│ ├── 识别关键业务流程
│ ├── 评估影响(财务/声誉/合规/法律)
│ ├── 确定RTO/RPO(量化目标)
│ └── 确定MTPD/SDO/WRT(时间链)
├── BCP 业务连续性计划
│ ├── 灾难响应流程
│ ├── 替代处理方案
│ └── 人员职责与通讯录
├── DRP 灾难恢复计划
│ ├── 技术恢复步骤
│ ├── 系统恢复优先级
│ └── 数据恢复流程
├── 测试与演练
│ ├── 桌面演练 / 模拟演练 / 全量切换演练
│ └── 演练频率与改进
└── 持续维护
├── 定期更新BCP/DRP
└── 组织培训
6.2 RPO 与 RTO(核心概念)
| 指标 | 全称 | 含义 | 方向 | 衡量 |
|---|---|---|---|---|
| RPO | Recovery Point Objective | 恢复点目标:可容忍的数据丢失量 | 过去(丢多少数据) | 时间或数据量 |
| RTO | Recovery Time Objective | 恢复时间目标:可容忍的业务中断时间 | 未来(多久恢复) | 时间 |
故障发生 恢复完成
| |
|←── RTO ──→|
| |
─────┤ ├─────→
| |
RPO→ | |
(可丢失的数据时段) |
RPO=0:不丢任何数据(同步复制)。
RTO=0:不中断业务(双活/无切换)。
RPO 和 RTO 越小,成本越高。
6.3 BCM 时间链(完整时间模型)
| 指标 | 全称 | 含义 |
|---|---|---|
| MTPD | Maximum Tolerable Period of Disruption | 最大可容忍中断时间(业务彻底不可恢复的极限) |
| RTO | Recovery Time Objective | 恢复时间目标(RTO ≤ MTPD) |
| WRT | Work Recovery Time | 工作恢复时间(系统恢复后,业务验证/数据校验/补录的时间) |
| SDO | Sum of Downtime Objectives | 总停机时间目标(RTO + WRT ≤ MTPD) |
| MAD | Maximum Allowable Downtime | 最大允许停机时间(同 MTPD) |
关系链:RTO + WRT ≤ MTPD
- RTO 是"技术恢复"时间(系统可用)
- WRT 是"业务恢复"时间(验证/补数据/确认)
- 两者之和不能超过 MTPD(业务极限)
6.4 BIA 分析步骤
- 识别关键业务流程 → 梳理业务清单
- 评估业务影响 → 财务损失/声誉/合规/客户流失
- 确定依赖关系 → 应用/数据/网络/人员/第三方
- 量化 RTO/RPO → 按影响程度分级
- 确定恢复优先级 → 关键业务先恢复
6.5 业务分级与 RTO/RPO 典型映射
| 级别 | 业务类型 | RTO | RPO | 灾备方案 |
|---|---|---|---|---|
| 一级 | 核心交易/支付 | < 1分钟 | = 0 | 同城双活+异地灾备 |
| 二级 | 重要业务/账务 | < 15分钟 | < 1分钟 | 同城热备+异步灾备 |
| 三级 | 一般业务/查询 | < 1小时 | < 15分钟 | 同城温备 |
| 四级 | 非关键/报表 | < 4小时 | < 1小时 | 异地冷备 |
七、灾备等级与架构
7.1 GB/T 20988-2007《信息安全技术 信息系统灾难恢复规范》
六个等级(从低到高):
| 级别 | 名称 | RTO | RPO | 数据传输 | 典型方案 |
|---|---|---|---|---|---|
| 1级 | 基本支持 | 2天~7天 | 1天~7天 | 离线人工搬运 | 备份介质异地存放 |
| 2级 | 备用场地支持 | 8小时~3天 | 1天~7天 | 定期备份+运输 | 备用机房+介质恢复 |
| 3级 | 电子数据传输 | 8小时~3天 | 数小时~1天 | 电子传输备份 | 定期备份+网络传输 |
| 4级 | 电子传输及完整设备 | 2小时~8小时 | 数分钟~数小时 | 实时备份+设备就绪 | 温备/热备 |
| 5级 | 实时数据传输及完整设备 | 0~2小时 | 0~数分钟 | 实时复制 | 同步复制+热备 |
| 6级 | 数据零丢失及远程集群 | ≈0 | =0 | 实时同步+应用切换 | 双活/集群远程 |
记忆要点:
- 1~3级:RTO 和 RPO 都在"天"级别,非实时。
- 4~5级:RTO 进入"小时"级别,数据近实时。
- 6级:RPO=0(零数据丢失),RTO≈0(应用自动切换)。
7.2 灾备架构模式
7.2.1 同城双活
┌─── 同城双活(距离<100km,RTT<2ms)───┐
│ │
┌────┴────┐ ┌────┴────┐
│ 中心A │ ←── 同步复制(RPO=0) ──→ │ 中心B │
│(AZ-1) │ │(AZ-2) │
└─────────┘ └─────────┘
↑ ↑
└───────── 全局DNS/GTM 流量调度 ─────────┘
| 维度 | 值 |
|---|---|
| 距离 | <100km |
| 网络延迟(RTT) | <2ms |
| 复制方式 | 同步 |
| RPO | =0 |
| RTO | 分钟级(流量切换) |
| 适用 | 金融核心/一级业务 |
7.2.2 异地灾备
┌──────────┐ ┌──────────┐
│ 主中心 │ ── 异步复制(RPO>0) ──→ │ 异地灾备 │
│(同城A) │ │ 中心(远) │
└──────────┘ └──────────┘
| 维度 | 值 |
|---|---|
| 距离 | >300km |
| 复制方式 | 异步 |
| RPO | >0(秒~分钟级) |
| RTO | 小时级(需启动灾备系统) |
| 适用 | 大规模灾难兜底 |
7.2.3 两地三中心(最经典)
┌─── 同城 ───┐ ┌─── 异地 ───┐
│ │ │ │
┌──┴──┐ ┌──┴──┐ ┌──┴──┐
│中心A│←同步→│中心B│ ──异步复制──→ │中心C│
│(AZ1)│ │(AZ2)│ │(远) │
└─────┘ └─────┘ └─────┘
↑ ↑ ↑
└── 同城双活 ──┘ │
│
异地灾备(兜底)───────────┘
| 中心 | 角色 | 复制 | RPO |
|---|---|---|---|
| 中心A | 同城主 | — | — |
| 中心B | 同城备 | 同步 | 0 |
| 中心C | 异地灾备 | 异步 | >0 |
两地三中心 = 同城双活(A+B) + 异地灾备©。兼顾同城 RPO=0 和异地大灾难兜底。
7.2.4 三地五中心 / 单元化部署
三地五中心:3个城市 × (同城双活 + 灾备) = 5个数据中心
单元化部署:按用户/业务维度切分单元,每个单元自包含,跨单元异步
| 维度 | 两地三中心 | 三地五中心 |
|---|---|---|
| 中心数 | 3 | 5 |
| RPO(同城) | 0 | 0 |
| RPO(异地) | >0 | ≈0(多活) |
| RTO | 分钟~小时 | 分钟级 |
| 成本 | 中 | 高 |
| 适用 | 金融/大型企业 | 超大规模/互联网巨头 |
7.3 灾备架构选型决策
┌─ RPO=0 且 RTO≈0 → 同城双活 / 三地五中心多活
│
业务要求 ──────────┤─ RPO=0 且 RTO<分钟 → 同城双活 + 异地灾备(两地三中心)
│
├─ RPO<分钟 且 RTO<小时 → 同城热备 + 异步灾备
│
├─ RPO<小时 且 RTO<数小时 → 温备 + 电子传输
│
└─ RPO<天 且 RTO<天 → 冷备 / 介质异地存放
八、容灾技术
8.1 容灾技术分层
| 层级 | 技术 | RPO | RTO | 复杂度 | 典型 |
|---|---|---|---|---|---|
| 数据级 | 存储复制/CDP | 0~秒 | 小时 | 低 | 存储阵列复制 |
| 数据库级 | 日志同步/逻辑复制 | 0~秒 | 分钟 | 中 | Oracle DG/MySQL主从 |
| 应用级 | 应用切换+流量调度 | 0~秒 | 分钟 | 高 | 双活应用+全局DNS |
| 业务级 | 全链路双活 | 0 | ≈0 | 最高 | 单元化部署 |
8.2 数据复制模式
| 模式 | 机制 | RPO | 写延迟 | 一致性 | 适用 |
|---|---|---|---|---|---|
| 同步复制 | 主写成功需备确认 | 0 | 高(含RTT) | 强一致 | 同城(<100km) |
| 异步复制 | 主写成功即返回,备后追 | >0 | 低 | 最终一致 | 异地(>300km) |
| 半同步 | 至少1备确认即返回 | ≈0 | 中 | 准强一致 | 同城+异地混合 |
同步复制:写延迟 = 本地写 + 网络RTT + 备库写。距离受限(RTT<2ms 即 <100km)。
异步复制:写延迟 ≈ 本地写。RPO = 异步延迟 × 写入速率。
8.3 CDP(Continuous Data Protection,持续数据保护)
- 原理:持续捕获每一次数据变更(IO级/日志级),可恢复到任意时间点。
- 特点:RPO≈0,可细粒度恢复(秒级回退)。
- 实现:IO拦截 + 日志持续记录 + 按需回放。
- 对比传统备份:
| 维度 | 传统备份 | CDP |
|---|---|---|
| RPO | 备份间隔(小时~天) | ≈0(秒级) |
| 恢复粒度 | 备份点 | 任意时间点 |
| 存储 | 全量+增量 | 日志持续 |
| 适用 | 一般数据 | 高要求/需回退到任意点 |
8.4 数据库级容灾技术
| 技术 | 产品 | 复制方式 | 特点 |
|---|---|---|---|
| Oracle Data Guard | Oracle | 同步/异步/最大可用 | 主备切换、Fast-Start Failover |
| MySQL 主从复制 | MySQL | 异步/半同步 | binlog 复制,MHA/MGR高可用 |
| PostgreSQL 流复制 | PG | 同步/异步 | WAL 日志流复制 |
| 分布式数据库 | TiDB/CockroachDB | Raft/Paxos | 多副本自动容灾 |
九、集群高可用
9.1 Quorum(法定人数/多数派)
Quorum = ⌈(N+1)/2⌉(N个节点中多数派的最少节点数)
| 节点数N | Quorum | 容忍故障数 | 说明 |
|---|---|---|---|
| 1 | 1 | 0 | 无冗余 |
| 2 | 2 | 0 | 2节点无法容忍任何故障(需仲裁) |
| 3 | 2 | 1 | 最小高可用集群 |
| 5 | 3 | 2 | 推荐生产配置 |
| 7 | 4 | 3 | 大规模 |
关键结论:
- 2节点集群无法实现自动多数派(任何1节点故障都无法过半),需引入第三方仲裁。
- 推荐奇数节点(3/5/7),偶数节点不比少一个的奇数节点多容错(4节点和3节点都只容1故障)。
9.2 脑裂(Split-Brain)
定义:集群网络分区导致各部分各自选举出主节点,产生多个"主",数据不一致。
正常: [主] ←→ [备1] ←→ [备2] 主=1个
脑裂: [主] ←✗→ [备1] ←→ [备2]
主 新主(备1被选为主)
↓ ↓
各自写入 → 数据冲突!
危害:双主写入 → 数据冲突/丢失/不一致,是最严重的集群故障。
9.3 脑裂预防
| 方法 | 原理 | 适用 |
|---|---|---|
| Quorum 多数派 | 少数派自动降级,不提供服务 | 3/5/7节点集群 |
| 仲裁节点(Witness) | 引入轻量第三方仲裁 | 2节点集群 |
| 共享存储/仲裁盘 | 抢占共享资源者为主 | 共享存储集群 |
| Fencing/STONITH | 强制隔离/关机故障节点 | 集群HA(Pacemaker/Corosync) |
| 租约(Lease) | 主节点定期续租,超时失效 | 分布式系统 |
9.4 Fencing 与 STONITH
| 概念 | 全称 | 含义 |
|---|---|---|
| Fencing | 隔离 | 将故障节点从集群隔离,防止其继续操作 |
| STONITH | Shoot The Other Node In The Head | 强制关机/重启故障节点 |
STONITH 是 Fencing 的极端形式:直接物理隔离(断电/重启),确保故障节点不再写入共享存储。
9.5 典型集群高可用组件
| 组件 | 角色 | 典型产品 |
|---|---|---|
| 心跳检测 | 故障发现 | Heartbeat / Corosync |
| 资源管理 | 资源切换/迁移 | Pacemaker / Keepalived |
| 仲裁 | 防脑裂 | Witness / SBD / Disk Witness |
| VIP管理 | 虚拟IP漂移 | VRRP / Keepalived |
| 负载均衡 | 流量分发 | LVS / HAProxy / Nginx |
十、稳定性防护(高可用第一道防线)
10.1 限流(Rate Limiting)
| 算法 | 原理 | 特点 | 适用 |
|---|---|---|---|
| 固定计数器 | 单位时间计数 | 简单,临界点突刺 | 低精度 |
| 滑动窗口 | 时间窗口内计数 | 平滑,无突刺 | 通用 |
| 漏桶(Leaky Bucket) | 固定速率出水 | 严格平滑,不允许突发 | 严格限速 |
| 令牌桶(Token Bucket) | 固定速率发令牌 | 允许突发(桶满可攒) | API网关(主流) |
| 分布式限流 | Redis+Lua/Sentinel | 集群级限流 | 微服务 |
漏桶 vs 令牌桶:
- 漏桶:以固定速率处理请求,不允许突发(多余请求排队或丢弃)。
- 令牌桶:以固定速率生成令牌,允许突发(桶中令牌可积累)。
- 令牌桶更灵活,是API网关的主流选择。
10.2 熔断(Circuit Breaker)
三态模型:
Closed(正常) ──失败率超阈值──→ Open(熔断)
↑ │
│ 等待超时
│ ↓
Half-Open(半开) ←──试探请求─── 探测
│
│试探成功 → Closed
│试探失败 → Open
| 状态 | 行为 |
|---|---|
| Closed | 正常放行请求,统计失败率 |
| Open | 直接拒绝/返回降级响应,不调用后端 |
| Half-Open | 放行少量试探请求,成功→Closed,失败→Open |
熔断 vs 限流:限流是"控制总量",熔断是"保护下游不被压垮"。熔断器在下游故障时快速失败,避免级联雪崩。
10.3 降级(Degradation)
| 类型 | 说明 | 示例 |
|---|---|---|
| 返回默认值 | 用兜底数据替代 | 推荐列表失败→返回热门列表 |
| 读降级 | 读不到则返回缓存/静态 | 详情页读DB失败→读缓存 |
| 写降级 | 异步写/先记日志 | 日志先写本地,异步同步 |
| 功能降级 | 关闭非核心功能 | 大促时关闭评论/推荐 |
| 页面降级 | 静态化/简化 | 动态页→静态页 |
10.4 隔离(Isolation)
| 方式 | 原理 | 适用 |
|---|---|---|
| 线程池隔离 | 不同服务用不同线程池 | 防止一个服务拖垮全部 |
| 信号量隔离 | 限制并发数 | 轻量级/快速调用 |
| 舱壁模式(Bulkhead) | 资源分区隔离 | 微服务/船舱隔离思想 |
| 实例隔离 | 不同租户/业务独立实例 | 多租户 |
10.5 超时与重试
| 策略 | 建议 |
|---|---|
| 超时 | 必须设置,避免无限等待;级联超时应逐层递减 |
| 重试 | 幂等操作才可重试;限制重试次数(通常≤3) |
| 退避 | 指数退避 + 抖动,避免重试风暴 |
| 重试风暴 | 上游重试×下游重试 → 请求放大,需熔断兜底 |
10.6 背压(Backpressure)
- 定义:下游处理不过来时,向上游施加"反压力",让上游降速。
- 机制:有界缓冲队列满 → 阻塞/丢弃/通知上游。
- 适用:流处理/消息队列/响应式编程。
10.7 雪崩效应与防护链
服务A → 服务B → 服务C
↓ C故障
B等待超时 → 线程耗尽 → B故障
↓
A等待超时 → 线程耗尽 → A故障 → 雪崩!
防护链:超时(防无限等待) → 限流(防过载) → 熔断(防级联) → 降级(保核心) → 隔离(防扩散)
十一、云原生高可用
11.1 多 AZ / 多 Region
| 概念 | 含义 | 故障域 |
|---|---|---|
| AZ(Available Zone) | 可用区,独立电力/网络/故障域 | 单AZ故障 |
| Region | 地域,包含多个AZ | 单Region故障(大灾难) |
| 多AZ部署 | 跨AZ分布副本 | 容忍单AZ故障 |
| 多Region部署 | 跨Region部署 | 容忍单Region故障(异地灾备) |
K8s 拓扑分布约束:
topologySpreadConstraints确保Pod均匀分布在多个AZ。
11.2 健康检查(K8s Probe)
| Probe类型 | 作用 | 失败行为 |
|---|---|---|
| Liveness | 存活检查 | 重启容器 |
| Readiness | 就绪检查 | 从Service Endpoints摘除(不接流量) |
| Startup | 启动检查 | 启动期间暂停Liveness检查 |
Liveness vs Readiness:
- Liveness 失败 → 重启(解决死锁/僵尸状态)。
- Readiness 失败 → 摘除流量(不重启,等依赖恢复)。
- 不要用 Liveness 做依赖检查(会导致级联重启)!
11.3 自愈机制
| 机制 | 触发条件 | 行为 |
|---|---|---|
| 容器重启 | Liveness失败 | 重启容器(重启策略Always/OnFailure) |
| Pod重建 | 节点故障 | 调度器在其他节点重建Pod |
| 节点驱逐 | 资源不足/不健康 | 驱逐Pod到其他节点 |
| 滚动更新 | 镜像更新 | 逐步替换,零停机(配合Readiness) |
| 自动伸缩 | 负载变化 | HPA扩缩Pod数量 |
11.4 弹性伸缩
| 类型 | 全称 | 调整对象 | 依据 |
|---|---|---|---|
| HPA | Horizontal Pod Autoscaler | Pod数量 | CPU/内存/自定义指标 |
| VPA | Vertical Pod Autoscaler | Pod资源配额 | 历史用量 |
| CA | Cluster Autoscaler | 节点数量 | Pod Pending(调度不上) |
HPA vs VPA:HPA(水平扩容)是主流,VPA(垂直扩容)需重启Pod,两者一般不同时使用。
11.5 调度策略与高可用
| 策略 | 作用 | 示例 |
|---|---|---|
| 反亲和(Anti-Affinity) | Pod分散到不同节点/AZ | 避免单节点故障影响全部副本 |
| PodDisruptionBudget | 限制自愿驱逐的Pod数 | 保证至少有X个可用 |
| 拓扑分布约束 | 均匀分布到拓扑域 | 跨AZ均匀分布 |
| 节点亲和 | 指定节点/标签调度 | 关键服务调度到高配节点 |
十二、选型比较(横向对比表)
12.1 主备 vs 双活
| 维度 | 主备(Active-Standby) | 双活(Active-Active) |
|---|---|---|
| 资源利用率 | ~50%(备机闲置) | ~100% |
| RTO | 秒~分钟(需切换) | ≈0(无切换) |
| RPO | 取决于复制方式 | 0(同步) |
| 实现难度 | 中 | 高(写冲突/全局路由) |
| 成本 | 中 | 高 |
| 适用 | 一般核心业务 | 金融核心/极关键 |
12.2 同步 vs 异步复制
| 维度 | 同步复制 | 异步复制 |
|---|---|---|
| RPO | 0 | >0 |
| 写延迟 | 高(含网络RTT) | 低(本地写即返回) |
| 距离限制 | <100km(RTT<2ms) | 无限制 |
| 一致性 | 强一致 | 最终一致 |
| 适用 | 同城 | 异地 |
12.3 同城 vs 异地灾备
| 维度 | 同城灾备 | 异地灾备 |
|---|---|---|
| 距离 | <100km | >300km |
| 防范灾难 | 设备/机房故障 | 地震/洪水/大面积停电 |
| RPO | 0(同步) | >0(异步) |
| RTO | 分钟级 | 小时级 |
| 复制方式 | 同步 | 异步 |
12.4 多副本 vs 纠删码
| 维度 | 3副本 | EC(4,2) |
|---|---|---|
| 存储开销 | 3x | 1.5x |
| 容错 | 2块 | 2块 |
| 读写性能 | 高 | 中(需编解码) |
| 适用 | 热数据 | 冷数据/归档 |
12.5 限流算法对比
| 算法 | 突发 | 平滑 | 实现 | 适用 |
|---|---|---|---|---|
| 固定计数器 | 有(临界突刺) | 否 | 最简 | 低精度 |
| 滑动窗口 | 弱 | 是 | 中 | 通用 |
| 漏桶 | 无 | 严格 | 中 | 严格限速 |
| 令牌桶 | 有(可攒令牌) | 是 | 中 | API网关(主流) |
12.6 灾备等级 vs RPO/RTO 速查
| GB/T级别 | RTO | RPO | 本质 |
|---|---|---|---|
| 1级 | 天 | 天 | 介质异地 |
| 2级 | 天 | 天 | 备用场地 |
| 3级 | 天 | 小时~天 | 电子传输 |
| 4级 | 小时 | 分钟~小时 | 完整设备 |
| 5级 | 小时 | 分钟 | 实时传输 |
| 6级 | ≈0 | 0 | 远程集群双活 |
十三、易混陷阱(易混淆点辨析)
13.1 RPO ≠ RTO
| RPO | RTO | |
|---|---|---|
| 方向 | 过去(丢多少数据) | 未来(多久恢复) |
| 单位 | 时间/数据量 | 时间 |
| =0含义 | 不丢数据 | 不中断 |
| 决定因素 | 复制方式(同步/异步) | 切换速度(自动/手动) |
陷阱:RPO=0 不代表 RTO=0。同步复制保证不丢数据(RPO=0),但主备切换仍需时间(RTO>0)。只有双活才能 RTO≈0。
13.2 可用性 ≠ 可靠性
| 可用性(A) | 可靠性® | |
|---|---|---|
| 关注 | 能用的时间比例 | 规定时间内不出故障 |
| 公式 | MTBF/(MTBF+MTTR) | e^(-λt) |
| 含修复 | 是(含MTTR) | 否(到首次故障) |
| 关系 | 频繁故障+快速恢复 → A高R低 | — |
13.3 冷备 / 温备 / 热备边界
| 冷备 | 温备 | 热备 | |
|---|---|---|---|
| 备机运行 | 否 | 是(不接流量) | 是(接流量或随时切) |
| 数据同步 | 无 | 定期 | 实时 |
| RTO | 小时~天 | 分钟~小时 | 秒~分钟 |
| RPO | 可能全丢 | 同步周期增量 | ≈0 |
陷阱:温备和热备的区别在于"数据是否实时同步",而非"是否运行"。温备可能运行但不实时同步。
13.4 串联 vs 并联可靠性
| 串联 | 并联 | |
|---|---|---|
| 公式 | R1×R2×…×Rn | 1-(1-R1)(1-R2)…(1-Rn) |
| 趋势 | 越串越低 | 越并越高 |
| 物理含义 | 任一故障全停 | 全部故障才停 |
| 典型 | 单链路依赖 | 冗余备份 |
陷阱:串联系统增加部件会降低可靠性;并联系统增加部件会提高可靠性。
13.5 2节点集群的脑裂陷阱
陷阱:2节点集群无法用多数派防脑裂(任何1节点故障都不过半)。必须引入第三方仲裁(Witness节点/仲裁盘/仲裁服务)。
13.6 N+1 vs 2N
| N+1 | 2N | |
|---|---|---|
| 备份数 | 1个共享 | N个独立 |
| 容错 | 备份自身故障则全失效 | 每节点独立备份 |
| 成本 | 低 | 高(翻倍) |
13.7 Liveness vs Readiness Probe
| Liveness失败 | Readiness失败 | |
|---|---|---|
| 行为 | 重启容器 | 摘除流量(不重启) |
| 适用 | 死锁/僵尸 | 依赖未就绪/过载 |
| 陷阱 | 用Liveness检查依赖→级联重启 | — |
13.8 漏桶 vs 令牌桶
| 漏桶 | 令牌桶 | |
|---|---|---|
| 突发 | 不允许 | 允许(攒令牌) |
| 速率 | 严格固定 | 平均固定,可突发 |
| 适用 | 严格限速 | API网关(主流) |
13.9 灾备级别 RPO=0 仅6级
陷阱:GB/T 20988 中只有6级保证 RPO=0(数据零丢失)。5级 RPO 是"0~数分钟",不是严格0。
13.10 可用度年停机时间换算
陷阱:可用度 99.95% 的年停机时间不是 5分钟,而是:
(1 - 0.9995) × 365 × 24 × 60 = 0.0005 × 525600 = 262.8 分钟 ≈ 4.38 小时
99.95% 介于3个9(8.76h)和4个9(52.6min)之间。
13.11 MTTF ≠ MTBF
| MTTF | MTBF | |
|---|---|---|
| 适用 | 不可修复系统 | 可修复系统 |
| 含义 | 到首次故障的时间 | 两次故障间的间隔 |
| 故障后 | 报废/更换 | 修复后继续用 |
| 关系 | MTBF = MTTF + MTTR | — |
陷阱:不可修复系统只有 MTTF,没有 MTBF(坏了不修,谈不上"故障间隔")。可修复系统才有 MTBF 和 MTTR。
关系:MTBF = MTTF + MTTR(严格定义下,一个完整周期 = 运行 + 修复)。
13.12 主动冗余 ≠ 被动冗余(可靠性公式不同)
| 主动冗余 | 被动冗余 | |
|---|---|---|
| 公式 | R = 1-∏(1-Ri) | R = R主+(1-R主)×R切换×R备 |
| 含切换率 | 否 | 是 |
| 切换失败 | 不存在(都在运行) | 系统失效 |
陷阱:被动冗余的可靠性公式含切换成功率 R切换,主动冗余不含。若忽略 R切换,会把被动冗余的可靠性算高。
结论:切换完全可靠(R切换=1)时两者可靠性相同;实际中 R切换<1,故主动冗余可靠性 ≥ 被动冗余。
13.13 可用性公式的两种写法
陷阱:A = MTBF/(MTBF+MTTR) 和 A = MTTF/MTBF 看似不同,本质等价。
- 前者:MTBF 定义为纯运行时间(软考常用)
- 后者:MTBF = MTTF+MTTR 定义为完整周期(严格定义)
- 软考答题用 A = MTBF/(MTBF+MTTR),除非题目给 MTTF。
十四、避坑实践(生产实践注意事项)
14.1 高可用设计原则
- 消除单点:无单点故障(SPOF),每层冗余。
- 故障隔离:一个故障不扩散(舱壁隔离)。
- 快速失败:超时+熔断,避免级联雪崩。
- 优雅降级:保核心、弃边缘。
- 自动恢复:自愈>人工干预。
- 设计为失败:假设一切都会失败(Design for Failure)。
14.2 灾备演练必做
- 定期演练(至少每年1次全量切换)。
- 演练不是测试:验证的是流程/人员/文档,不只是技术。
- 真实切换:不要只做"模拟",要真切换流量。
- 回退预案:每次切换都要有回退方案。
14.3 常见避坑清单
| 坑 | 后果 | 对策 |
|---|---|---|
| 2节点无仲裁 | 脑裂/数据不一致 | 加Witness/用3节点 |
| Liveness查依赖 | 级联重启雪崩 | 用Readiness查依赖 |
| 无超时设置 | 线程耗尽/雪崩 | 每层设超时,递减 |
| 同步复制跨异地 | 写延迟极高 | 同城同步+异地异步 |
| 只做主备不做演练 | 灾备切不过去 | 定期真实演练 |
| 限流只做单机 | 集群过载 | 分布式限流(Redis+Lua) |
| 重试无退避 | 重试风暴 | 指数退避+抖动+熔断 |
| RAID5用大盘 | 重建时间极长/双盘故障 | 用RAID10或RAID6 |
| DNS切换TTL过长 | 切换延迟大 | 短TTL(60s)+预降TTL |
14.4 两地三中心避坑
- 同城距离:确保 <100km,RTT <2ms,否则同步复制延迟过大。
- 异地不兜底同城:异地是防范大灾难,同城故障不应切异地(RPO太大)。
- 数据一致性:同城强一致,异地最终一致,切换时需数据校验。
- 网络带宽:异步复制带宽要覆盖峰值写入速率,否则RPO持续增大。
十五、计算题型
题型一:串并联可用度计算
【例1】 某系统由两个子系统串联组成,可用度分别为 0.99 和 0.98,求系统可用度。
解:,即 97.02%。
【例2】 某系统由两个子系统并联组成,可用度分别为 0.9 和 0.8,求系统可用度。
解:,即 98%。
【例3】 三个相同部件并联,单部件可靠度 R=0.9,求系统可靠度。
解:。
题型二:混联系统可靠度
【例4】 系统结构:两个并联(R=0.9)的子系统,再串联一个 R=0.95 的部件,求系统可靠度。
解:
- 并联部分:
- 串联:
题型三:k/n 表决系统
【例5】 3个相同部件组成 2/3 表决系统,单部件可靠度 R=0.9,求系统可靠度。
解:
题型四:MTBF/MTTR 可用度计算
【例6】 某系统 MTBF=1000小时,MTTR=10小时,求可用度。
解:,即 99.01%(约3个9)。
【例7】 要求系统可用度达到 99.99%(4个9),MTTR=1小时,求最低 MTBF。
解:
题型五:可用度→年停机时间
【例8】 某系统可用度 99.95%,求年停机时间。
解: 分钟 ≈ 4.38 小时。
题型六:并联系统年停机时间
【例9】 两台服务器并联,单台年可用度 99%(年停机 3.65天),求系统年停机时间。
解:
年停机 = 分钟 ≈ 52.6 分钟(4个9)。
结论:两个 99%(3个9) 并联 → 99.99%(4个9)。每并联一组,约多一个9。
题型七:RPO 计算(异步复制)
【例10】 异步复制延迟 5 秒,写入速率 1000 条/秒,求 RPO(数据量)。
解: 条数据。
【例11】 异步复制延迟 10 秒,求 RPO(时间)。
解:RPO = 10 秒(最多丢失 10 秒的数据)。
题型八:Quorum 容错计算
【例12】 5节点 Raft 集群,求 Quorum 和容忍故障数。
解:
- Quorum = ⌈(5+1)/2⌉ = 3
- 容忍故障 = 5 - 3 = 2(可挂2个节点)
【例13】 要求容忍 3 个节点故障,最少需要多少节点?
解:容忍 f 个故障需 n ≥ 2f+1 = 2×3+1 = 7 个节点。
题型九:EC 存储开销计算
【例14】 EC(6,3) 编码,原始数据 600GB,求实际存储开销。
解:
- 数据块 6 个,校验块 3 个,共 9 个块。
- 每块 = 600/6 = 100GB
- 总存储 = 9 × 100 = 900GB
- 存储开销比 = 9/6 = 1.5x
- 容忍任意 3 块丢失。
题型十:RAID 可用容量计算
【例15】 6块 2TB 磁盘,分别求 RAID 0/1/5/6/10 的可用容量。
解:
| RAID | 可用容量 | 说明 |
|---|---|---|
| RAID 0 | 6×2=12TB | 全部可用,不容错 |
| RAID 1 | 6×2/2=6TB | 50%(镜像) |
| RAID 5 | (6-1)×2=10TB | 1盘校验 |
| RAID 6 | (6-2)×2=8TB | 2盘校验 |
| RAID 10 | 6×2/2=6TB | 先镜像再条带,50% |
题型十一:WNR Quorum 一致性判断
【例16】 N=5, W=3, R=2,判断是否强一致。
解:W + R = 3 + 2 = 5 = N,W+R > N 不成立(等于N)。
- 严格来说 W+R > N 才保证强一致,W+R = N 是边界情况,可能读到旧数据。
- 结论:不保证强一致(需 W+R > N,即至少 6)。
修正:常见教材中 W+R > N 为强一致条件。W+R = N 时读写可能无交集(恰好不重叠),不保证强一致。应改为 W=3, R=3(W+R=6>5)。
题型十二:灾备级别判断
【例17】 某系统 RTO=30分钟,RPO=0,对应 GB/T 20988 哪个级别?
解:RPO=0 且 RTO 在分钟级 → 6级(数据零丢失及远程集群)。
【例18】 某系统 RTO=4小时,RPO=30分钟,对应哪个级别?
解:RTO 在 2~8 小时,RPO 在分钟~小时 → 4级(电子传输及完整设备)。
题型十三:MTTF / MTBF / MTTR 关系换算
【例19】 某可修复系统 MTTF=9990小时,MTTR=10小时,求 MTBF(严格定义)和可用度。
解:
- 严格定义:MTBF = MTTF + MTTR = 9990 + 10 = 10000 小时
- 可用度:A = MTTF / MTBF = 9990 / 10000 = 0.999(3个9)
- 用软考公式验证:A = MTBF’ / (MTBF’ + MTTR),其中 MTBF’=9990(纯运行)
A = 9990 / (9990+10) = 9990/10000 = 0.999 ✓
【例20】 某不可修复设备 MTTF=5000小时,求运行 1000 小时的可靠性。
解:
- λ = 1/MTTF = 1/5000 = 0.0002
- R(1000) = e^(-λt) = e^(-0.0002×1000) = e^(-0.2) ≈ 0.8187
【例21】 已知系统可用度 A=0.999,MTTR=2小时,用软考公式求 MTBF。
解:
验证:A = 1998/(1998+2) = 1998/2000 = 0.999 ✓
题型十四:主动冗余 vs 被动冗余可靠性对比
【例22】 两个相同部件 R=0.9,分别用主动冗余(并联)和被动冗余(主备,切换成功率 R切换=0.95)实现,求系统可靠性。
解:
- 主动冗余(并联):R = 1-(1-0.9)² = 1-0.01 = 0.99
- 被动冗余(主备):R = R主 + (1-R主)×R切换×R备
R = 0.9 + (1-0.9)×0.95×0.9 = 0.9 + 0.1×0.95×0.9 = 0.9 + 0.0855 = 0.9855
结论:主动冗余(0.99) > 被动冗余(0.9855),因为被动冗余存在切换失败风险。
若切换完全可靠(R切换=1):R被动 = 0.9+0.1×1×0.9 = 0.99 = R主动(两者相同)。
【例23】 主备系统,主 R=0.95,备 R=0.9,切换成功率 R切换=0.98,求系统可靠性。若改为主动冗余(并联)呢?
解:
- 被动冗余:R = 0.95 + (1-0.95)×0.98×0.9 = 0.95 + 0.05×0.98×0.9 = 0.95 + 0.0441 = 0.9941
- 主动冗余(并联):R = 1-(1-0.95)(1-0.9) = 1-0.05×0.1 = 1-0.005 = 0.995
结论:主动冗余(0.995) > 被动冗余(0.9941),差异来自切换成功率。
十六、关联图(知识点关系图)
┌─────────────┐
│ 业务连续性 │
│ (BCM) │
└──────┬──────┘
│
┌────────────┼────────────┐
↓ ↓ ↓
┌─────────┐ ┌─────────┐ ┌─────────┐
│ BIA │ │ BCP │ │ DRP │
│(分析) │ │(连续性) │ │(恢复) │
└────┬────┘ └─────────┘ └────┬────┘
│ │
↓ ↓
┌────────────┐ ┌──────────────┐
│ RTO / RPO │ │ 灾备架构 │
│ (量化目标) │ │ │
└─────┬──────┘ └──────┬───────┘
│ │
│ ┌─────────────────────┤
↓ ↓ ↓
┌──────────────┐ ┌──────────────┐
│ 可用性理论 │ │ 容灾技术 │
│ MTBF/MTTR │ │ 同步/异步 │
│ 串/并联 │ │ CDP/日志复制 │
└──────┬───────┘ └──────────────┘
│
↓
┌──────────────┐
│ 冗余设计 │←── 集群高可用(Quorum/脑裂)
│ 主备/双活 │
│ N+1/2N │
└──────┬───────┘
│
┌────────┼────────┐
↓ ↓ ↓
┌────────┐┌────────┐┌────────────┐
│负载均衡││数据可靠││稳定性防护 │
│DNS/LB ││副本/EC ││限流/熔断/降级│
│LVS/Nginx││RAID ││隔离/超时 │
└────────┘└────────┘└────────────┘
│
↓
┌────────────┐
│云原生高可用 │
│多AZ/多Region│
│Probe/自愈 │
└────────────┘
核心关联:
- RPO/RTO ← BIA分析 → 决定 → 灾备架构选型 → 决定 → 容灾技术 → 依赖 → 复制方式(同步/异步)
- 可用性计算 → 评估 → 冗余设计 → 依赖 → 集群高可用(Quorum)
- 稳定性防护 → 保护 → 负载均衡后端 → 配合 → 健康检查 → 触发 → 自愈/切换
十七、双轨口诀
17.1 可用性公式
顺口溜:
无故障时间比总时间,MTBF除以总和;
串联相乘越串越低,并联一减各一相乘。
谐音:
A = M/(M+R) → “阿妹(M)除以妹(M)加阿®”
串联 R1×R2 → “串乘”
并联 1-(1-R1)(1-R2) → “并减各补乘”
17.2 可用度等级(几个9)
顺口溜:
两个九,停三天半;三个九,停八小时半;
四个九,停一小时不到(52分钟);五个九,停五分钟;
六个九,停半分钟。每多一个九,缩小十倍。
谐音:
99→3.65天,999→8.76h,9999→52.6min,99999→5.26min,999999→31.5s
“二三天,三八半,四五二,五五二,六三一”
(2个9→3天,3个9→8小时半,4个9→52分,5个9→5分,6个9→31秒)
17.3 RPO 与 RTO
顺口溜:
RPO 往回看,丢多少数据;
RTO 往前看,多久能恢复;
零丢靠同步,零断靠双活。
谐音:
RPO → “日抛” → 抛掉的数据(过去)
RTO → “日透” → 透支的时间(未来,恢复用时)
RPO=0 同步复制,RTO=0 双活无切换
17.4 灾备六级(GB/T 20988)
顺口溜:
一级搬盘,二级搬机,三级传数据;
四级设备全,五级实时传,六级零丢双活全。
谐音:
1盘2场3传4备5实6零
→ “一盘二场三传四备五实六零”
→ 联想:“一盘散沙,二场备用,三传电子,四备就绪,五实实时,六零零丢”
17.5 冷温热备
顺口溜:
冷备关机不同步,温备运行定期更;
热备实时随时切,双活同时都干活。
谐音:
冷→“困”(关机) 温→“稳”(运行不接活) 热→“活”(实时) 双→“双”(都干)
17.6 串并联方向
顺口溜:
串联相乘越来越低,并联互补越来越高;
先并后串先算并,先串后并先算串。
谐音:
串→“穿”(穿透相乘) 并→“并”(合并互补)
“穿乘并补” → 串联穿过去相乘,并联补上(1-各一)再被1减
17.7 Quorum 与脑裂
顺口溜:
多数派过半才能活,奇数节点最稳妥;
两节点必加仲裁,脑裂双主要隔离。
谐音:
Quorum → “阔润” → 阔过半才润(活)
脑裂 → “闹裂” → 闹分裂要隔离
2f+1 → “二夫加一” → 容f故障需2f+1节点
17.8 稳定性防护五件套
顺口溜:
限流控总量,熔断保下游;
降级保核心,隔离防扩散;
超时防等待,五件防雪崩。
谐音:
限→“线”(画线控制) 熔→“融”(融化断开) 降→“降”(降落兜底) 隔→“格”(格开) 超→“超”(超时切断)
“线融降格超” → 联想"仙人融化降格超度"(限熔降隔超)
17.9 RAID 级别
顺口溜:
零条带不容错,一镜像半容量;
五条带一校验,六条带双校验;
十先镜后条带,生产首选十。
谐音:
0→条 1→镜 5→校 6→双 10→镜条
“零条一镜五校六双十镜条”
→ 联想"零跳一惊五笑六双十惊跳"
17.10 两地三中心
顺口溜:
同城双活同步零丢,异地灾备异步兜底;
两地三中心最经典,同城近异地远。
谐音:
同城→“同” 异地→“异” → “同零异兜”(同城RPO=0,异地兜底)
两地三中心 → “两三” → 联想"两山(三中心)之间"
17.11 MTTF / MTBF / MTTR 三者关系
顺口溜:
MTTF 到首坏,不可修才用它;
MTBF 间隔间,可修系统两故障;
MTTR 修复时,三者关系加起来;
MTBF 等于 TF 加 TR,可用 TF 比 BF。
谐音:
MTTF → “妹踢夫” → 踢到夫君首次倒(首次故障,不可修)
MTBF → “妹踢比夫” → 两次踢之间比间隔(故障间隔,可修)
MTTR → “妹踢兔” → 踢完去修兔(修复时间)
关系:BF = TF + TR → “比夫 = 踢夫 + 踢兔” → 间隔 = 运行 + 修复
A = TF/BF → “阿 = 踢夫/比夫” → 可用 = 运行/周期
17.12 主动冗余 vs 被动冗余
顺口溜:
主动冗余全在线,并联公式不算切换;
被动冗余待命等,主坏才切含切换率;
切换若能百分百,两者可靠就一样;
实际切换有风险,主动可靠大等于被动。
谐音:
主动→“主” 并联→“并” → “主并”(主动=并联,都在跑)
被动→“被” 主备→“备” → “被备”(被动=备用,等着接)
主动公式:1-∏(1-Ri) → “一减补乘”(不含切换)
被动公式:R主+(1-R主)×R切×R备 → “主加补切备”(含切换率)
“主并不切,被备要切” → 主动并联不切换,被动备用要切换
十八、速记总表
18.1 核心公式速查
| 公式 | 表达式 | 用途 |
|---|---|---|
| 可用度(软考) | A = MTBF/(MTBF+MTTR) | 可用性计算(MTBF为纯运行时间) |
| 可用度(严格) | A = MTTF/MTBF | MTBF=MTTF+MTTR(完整周期) |
| 三者关系 | MTBF = MTTF + MTTR | 可修复系统完整周期 |
| 可靠性 | R(t) = e^(-λt), λ=1/MTBF | 规定时间不故障概率 |
| 串联 | R = ∏Ri | 串联可靠度 |
| 并联(主动冗余) | R = 1-∏(1-Ri) | 并联/主动冗余可靠度 |
| 被动冗余(主备) | R = R主+(1-R主)×R切换×R备 | 含切换成功率 |
| k/n表决 | Σ C(n,i)·R^i·(1-R)^(n-i), i=k~n | 表决系统 |
| 年停机 | (1-A)×525600 分钟 | 可用度→停机时间 |
| Quorum | ⌈(N+1)/2⌉ | 多数派 |
| 容错节点 | f = (N-1)/2 | N节点容错数 |
| 最少节点 | N = 2f+1 | 容f故障最少节点 |
| EC开销 | (k+m)/k | 纠删码存储比 |
18.2 RPO/RTO 速查
| 方案 | RPO | RTO | 成本 |
|---|---|---|---|
| 冷备 | 全丢 | 天 | 低 |
| 温备 | 周期增量 | 小时 | 中低 |
| 热备 | ≈0 | 分钟 | 中高 |
| 同城双活 | 0 | 分钟 | 高 |
| 双活(主主) | 0 | ≈0 | 最高 |
| 异地灾备(异步) | 秒~分 | 小时 | 中 |
| 两地三中心 | 0(同城) | 分钟 | 高 |
18.3 灾备六级速查
| 级 | RTO | RPO | 关键词 |
|---|---|---|---|
| 1 | 天 | 天 | 介质 |
| 2 | 天 | 天 | 场地 |
| 3 | 天 | 时~天 | 电子传 |
| 4 | 时 | 分~时 | 设备全 |
| 5 | 时 | 分 | 实时传 |
| 6 | ≈0 | 0 | 零丢双活 |
18.4 冗余配置速查
| 模式 | 含义 | 容错 |
|---|---|---|
| 主动冗余 | 全部同时运行(并联) | R=1-∏(1-Ri),不含切换 |
| 被动冗余 | 主运行备待命(主备) | R=R主+(1-R主)×R切×R备 |
| N+1 | N工作+1共享备 | 备好则容1 |
| 2N | 每节点独立备 | 容各1 |
| 2N+1 | 2N+仲裁 | 防脑裂 |
| 3副本 | 3份数据 | 容2 |
| EC(k,m) | k数据+m校验 | 容m |
18.5 稳定性防护速查
| 手段 | 作用 | 关键参数 |
|---|---|---|
| 限流 | 控总量 | QPS阈值 |
| 熔断 | 保下游 | 失败率阈值/恢复时间 |
| 降级 | 保核心 | 降级策略/兜底 |
| 隔离 | 防扩散 | 线程池/信号量 |
| 超时 | 防等待 | 超时时间 |
| 重试 | 容偶发 | 次数/退避 |
| 背压 | 控上游 | 队列容量 |
18.6 K8s Probe 速查
| Probe | 失败行为 | 用途 |
|---|---|---|
| Liveness | 重启 | 死锁/僵尸 |
| Readiness | 摘流量 | 依赖未就绪 |
| Startup | 暂停Liveness | 慢启动 |
18.7 常用数字速记
| 数字 | 含义 |
|---|---|
| 525600 | 一年分钟数(365×24×60) |
| 8.76h | 3个9年停机 |
| 52.6min | 4个9年停机 |
| 5.26min | 5个9年停机 |
| 100km | 同城灾备距离上限 |
| 2ms | 同城同步RTT上限 |
| 300km | 异地灾备距离下限 |
| 2f+1 | 容f故障最少节点 |
| 3节点 | 最小HA集群 |
十九、背诵路线建议
第一阶段:核心概念(1~2天)
- RPO/RTO 定义 → 方向(过去/未来)→ 口诀"日抛日透"
- 可用度公式 → A=MTBF/(MTBF+MTTR) → 年停机时间换算
- 几个9 → 2~6个9对应停机时间 → “二三天三八半四五二五五二六三一”
- 冷温热备 → RTO/RPO递减 → “冷困温稳热活双”
第二阶段:灾备体系(2~3天)
- GB/T 20988 六级 → RTO/RPO对应 → “1盘2场3传4备5实6零”
- 灾备架构 → 同城双活/异地灾备/两地三中心/三地五中心
- 容灾技术分层 → 数据级→数据库级→应用级→业务级
- 复制模式 → 同步(RPO=0)/异步(RPO>0)/半同步
第三阶段:可用性计算(2~3天)
- 串联 → R=∏Ri → “穿乘”
- 并联 → R=1-∏(1-Ri) → “并减补乘”
- 混联 → 先并后串/先串后并
- k/n表决 → 组合数公式 → 2/3表决典型
- 刷计算题 → 串并联、混联、MTBF/MTTR、年停机
第四阶段:集群与防护(2天)
- Quorum → ⌈(N+1)/2⌉ → 2f+1
- 脑裂 → 原因/危害/预防 → “闹裂要隔离”
- 稳定性五件套 → 限流/熔断/降级/隔离/超时 → “线融降格超”
- 限流算法 → 漏桶vs令牌桶
第五阶段:数据可靠与云原生(2天)
- RAID → 0/1/5/6/10 → “零条一镜五校六双十镜条”
- 多副本vs EC → 存储开销/容错对比
- WNR Quorum → W+R>N强一致
- K8s Probe → Liveness/Readiness/Startup
- 多AZ/多Region → 故障域隔离
第六阶段:综合与冲刺(1~2天)
- 选型对比表 → 主备vs双活、同步vs异步、同城vs异地
- 易混陷阱 → 10大陷阱过一遍
- 速记总表 → 考前速查
- 口诀总复习 → 所有顺口溜+谐音
文档说明:本文档覆盖软考系统架构设计师「高可用与业务连续性」完整知识体系,按12章节结构模板组织,包含理论基石、冗余设计、负载均衡、数据可靠性、BCM、灾备等级、容灾技术、集群高可用、稳定性防护、云原生高可用十大核心模块,以及选型比较、易混陷阱、避坑实践、计算题型、关联图、双轨口诀、速记总表、背诵路线。重点关注选型权衡、易混淆避坑、计算题型三维度。
- 点赞
- 收藏
- 关注作者
评论(0)