完整架构

完整的异地容灾系统不是单个技术组件,而是一套覆盖目标、架构、数据、切换、演练和组织流程的体系:

业务分级 -> RTO/RPO -> 多机房架构 -> 数据同步
       -> 健康检查 -> 故障切换 -> 数据校验 -> 回切与复盘

热备容灾架构

一个可落地的热备容灾架构可以这样设计:

                 ┌─────────────────────────────────────────────┐
                 │              全局流量调度(GSLB)            │
                 │       按地域 / 健康状态 / 权重路由            │
                 └───────────────────┬─────────────────────────┘

              ┌──────────────────────┼──────────────────────┐
              ▼                      ▼                      ▼
   ┌──────────────────┐   ┌──────────────────┐   ┌──────────────────┐
   │    主机房         │   │    备用机房       │   │  用户就近访问     │
   │  承载主要写流量   │   │  同版本服务部署    │   │  影子/只读流量    │
   └────────┬─────────┘   └────────┬─────────┘   └──────────────────┘
            │                      │
            │   数据复制/日志同步    │
            ▼                      ▼
   ┌──────────────────┐   ┌──────────────────┐
   │  主数据库         │──▶│  备数据库         │
   │  缓存 / 消息      │   │  缓存预热 / 消息   │
   │  对象存储         │──▶│  跨区域复制        │
   └──────────────────┘   └──────────────────┘

各层职责

  1. 主机房承载主要写流量。
  2. 备用机房长期部署同版本服务,承载少量影子或只读流量,避免长期空闲导致配置和容量过期。
  3. 数据库通过日志复制同步到备用机房,监控主备延迟。
  4. 对象存储开启跨区域复制,文件数据不依赖数据库同步。
  5. 消息系统保留幂等消费和重放能力,切换后不丢消息、不重复消费。
  6. 全局流量调度根据健康状态切换入口,同时保证流量调度和数据状态一致(不能把用户切到没有其数据的机房)。
  7. 监控系统持续观察主备延迟、服务健康和业务指标。
  8. 容灾预案通过定期演练验证,切流和回切有 Runbook。

故障切换流程

一次主备切换通常包括:

确认故障级别(错误率/网络/数据库不可写/多可用区异常)

冻结或限制主机房写入,避免双写冲突扩大

检查数据同步延迟,评估 RPO

提升备用数据库或服务为主

切换流量到备用机房(DNS/GSLB 生效)

打开必要的降级策略(暂停非核心功能)

验证核心链路:登录、下单、支付、查询

持续观察错误率、延迟和业务指标

回切流程

主机房恢复后不要急着切回:

主备数据重新追平(对账校验)

主机房通过健康检查

切回期间避免双写

切回失败时能重新回到备用机房

指标体系

  • 主备复制延迟。
  • 最近一次成功同步时间。
  • 备用机房服务健康度。
  • 全局流量调度状态。
  • 核心业务成功率。
  • RTO/RPO 演练达标率。

备用机房平时不出问题,不代表事故时可用。只有这些指标持续健康,团队才有切换信心。