Skip to content

RPO/RTO 设计方法论

业务影响分析(BIA)

在设计容灾方案前,必须进行业务影响分析:

BIA 分析步骤:

1. 识别关键业务系统
   - 核心交易系统(银行转账、电商下单)
   - 支撑系统(ERP、CRM、OA)
   - 基础设施(DNS、AD、邮件)

2. 评估停机影响
   - 财务损失(每小时损失多少钱)
   - 声誉损失(客户流失风险)
   - 合规风险(监管要求)

3. 确定 RPO/RTO 目标
   - 基于业务影响和成本平衡
   - 越低的 RPO/RTO,成本越高

4. 输出:业务连续性需求文档

RPO/RTO 与技术方案映射

RPO = 0,RTO < 1 分钟:
  技术:同步复制 + 双活
  成本:极高
  适用:金融核心交易、医疗急救系统

RPO < 15 分钟,RTO < 15 分钟:
  技术:异步复制 + 快速切换
  成本:高
  适用:电商核心系统、政务关键系统

RPO < 1 小时,RTO < 1 小时:
  技术:定期快照 + 备份
  成本:中等
  适用:ERP、CRM、邮件系统

RPO < 24 小时,RTO < 4 小时:
  技术:每日备份
  成本:低
  适用:开发测试、归档系统

存储同步技术

同步复制

工作原理:
  主存储写入数据
      ↓ 同时
  备存储写入数据
      ↓ 两者都确认
  返回写入成功

特点:
  RPO = 0(零数据丢失)
  写入延迟 = 本地延迟 + 网络往返延迟
  
延迟要求:
  网络延迟 < 5ms(同城专线)
  超过 5ms 会显著影响应用性能

H3C 实现:
  H3C 全闪存储双活(Active-Active)
  两台存储互为镜像,同时提供服务

异步复制

工作原理:
  主存储写入数据 → 立即返回成功
      ↓ 异步
  将变化数据复制到备存储

特点:
  RPO > 0(有数据丢失风险)
  写入延迟不受网络影响
  适合跨城(延迟 20-50ms)

H3C 实现:
  H3C 远程复制(Remote Replication)
  支持:同步/异步/半同步三种模式

连续数据保护(CDP)

CDP(Continuous Data Protection):
  每次写入都记录到日志
  可以恢复到任意时间点

实现方式:
  存储层 CDP:在存储控制器层面记录
  主机层 CDP:在主机 I/O 路径上记录

优势:
  RPO 接近 0(秒级)
  可以恢复到任意历史时间点

劣势:
  存储开销大(需要保存所有历史 I/O)
  通常只保留最近 24-72 小时

容灾演练

演练计划

年度容灾演练计划:

Q1:桌面演练(Tabletop Exercise)
  - 不实际切换,只讨论流程
  - 验证文档和流程的完整性
  - 时间:2-4 小时

Q2:功能演练(Functional Exercise)
  - 实际切换到灾备环境
  - 验证技术方案可行性
  - 时间:1 天(含恢复)

Q3:桌面演练

Q4:全面演练(Full-Scale Exercise)
  - 模拟真实灾难场景
  - 包括人员、流程、技术全面验证
  - 时间:2-3 天

演练脚本示例

场景:主数据中心机房断电,切换到灾备数据中心

演练步骤:

T+0:宣布演练开始,模拟主数据中心断电
T+5分钟:确认主数据中心不可用
T+10分钟:启动灾备切换流程
  - 通知相关团队
  - 确认灾备数据中心状态
T+15分钟:存储切换
  - 将灾备存储提升为主存储
  - 验证数据完整性
T+20分钟:应用启动
  - 在灾备数据中心启动应用服务器
  - 验证应用可用性
T+25分钟:DNS 切换
  - 将域名解析指向灾备数据中心
T+30分钟:业务验证
  - 执行业务功能测试
  - 确认核心功能正常
T+35分钟:宣布切换完成,记录 RTO

演练结束后:
  - 记录实际 RTO(目标 < 30 分钟)
  - 记录数据丢失量(目标 RPO < 15 分钟)
  - 输出演练报告,记录问题和改进项

容灾方案成本估算

python
def dr_cost_estimation(
    primary_storage_tb: float,
    rpo_minutes: int,
    rto_minutes: int,
    distance_km: int
):
    """
    容灾方案成本估算(参考)
    """
    base_storage_cost = primary_storage_tb * 5000  # 5000元/TB
    
    if rpo_minutes == 0 and rto_minutes <= 5:
        # 同步双活方案
        multiplier = 3.0
        solution = "同步双活(Active-Active)"
    elif rpo_minutes <= 15 and rto_minutes <= 15:
        # 异步复制 + 快速切换
        multiplier = 2.0
        solution = "异步复制 + 快速切换"
    elif rpo_minutes <= 60 and rto_minutes <= 60:
        # 定期快照 + 备份
        multiplier = 1.3
        solution = "定期快照 + 备份"
    else:
        # 基础备份
        multiplier = 1.1
        solution = "基础备份"
    
    # 专线成本(距离越远越贵)
    if distance_km <= 50:
        line_cost_monthly = 50000  # 同城专线
    elif distance_km <= 500:
        line_cost_monthly = 150000  # 省内专线
    else:
        line_cost_monthly = 300000  # 跨省专线
    
    total_hardware = base_storage_cost * multiplier
    annual_line_cost = line_cost_monthly * 12
    
    print(f"=== 容灾方案成本估算 ===")
    print(f"方案:{solution}")
    print(f"RPO 目标:{rpo_minutes} 分钟")
    print(f"RTO 目标:{rto_minutes} 分钟")
    print(f"硬件成本:{total_hardware:,.0f} 元")
    print(f"专线年费:{annual_line_cost:,.0f} 元")
    print(f"总 TCO(3年):{total_hardware + annual_line_cost * 3:,.0f} 元")

# 示例
dr_cost_estimation(
    primary_storage_tb=100,
    rpo_minutes=15,
    rto_minutes=30,
    distance_km=200
)

褚成志的云与计算笔记