目标
灾备(DR,Disaster Recovery):在发生区域性灾难(地震、洪水、断电、大规模故障)时,保证业务能够继续或被恢复。
两个关键指标:
- RTO:多久能恢复服务;
- RPO:最多丢失多少数据。
常见的灾备架构
一、备份恢复(最基础)
在异地保存备份,灾难发生后重建环境并恢复数据。
RTO:数小时到数天;
RPO:取决于备份频率(数小时到一天);
成本:最低。
二、冷备(Cold Standby)
异地有一套环境,但不运行(或只运行基础服务)。灾难发生后启动并恢复数据。
RTO:数小时;
成本:中等(只需存储和资源预留)。
三、温备(Warm Standby)
异地环境部分运行(如应用已部署、数据库在同步),灾难后需要少量操作即可切换。
RTO:数十分钟到数小时。
四、热备(Hot Standby / Active-Standby)
异地环境完全运行,数据实时或准实时同步。灾难时切换流量。
RTO:分钟级;
RPO:秒级到分钟级;
成本:高(需要双倍资源)。
五、双活 / 多活(Active-Active)
多个站点同时对外提供服务,流量在它们之间分配。
- 一个站点故障时,流量自动切换到其他站点;
- 资源利用率最高(不是闲置的备份);
- RTO 接近 0。
代价:
- 数据一致性极难处理(跨站点的分布式事务、冲突解决);
- 应用架构需要专门设计(无状态、数据分片或全局一致性方案);
- 运维复杂度最高。
多活通常从"读多活 + 写单点"或"按用户分片的多活"起步,而非全局写多活。
"两地三中心"
中国金融等行业常用的灾备架构:
- 两地:两个地理上相距较远的城市(避免同一区域性灾难);
三中心:
- 生产中心(主);
- 同城灾备中心:同一个城市(或邻近)的第二个中心,数据同步复制(RPO≈0),可快速切换;
- 异地灾备中心:位于另一个城市,异步复制,用于应对区域性灾难。
设计逻辑:
- 同城灾备应对机房级故障(火灾、停电、设备故障)——切换快,数据不丢;
- 异地灾备应对城市级灾难(地震、洪水)——距离远,但可能有少量数据丢失(异步复制)。
这体现了风险分层 + 成本权衡的思想。
数据复制的关键取舍
同步复制:
- 主库写入必须等备库确认;
- RPO = 0(数据不丢);
- 代价:写入延迟增加(受网络往返影响),且备库故障会阻塞主库写入(可用性下降)。
异步复制:
- 主库写入立即返回,数据稍后同步;
- RPO > 0(可能有数据丢失窗口);
- 代价:故障时可能丢失最后一批数据;
- 优势:性能影响小,距离可以很远。
半同步:折中(等至少一个备库确认,但可退化为异步)。
选择取决于:业务的 RPO 要求 + 网络条件(延迟和带宽)。
一个常被忽略的问题:灾备演练
灾备系统如果从未演练过,就不可信。
常见问题:
- 切换脚本从未实际运行过,有 bug;
- 依赖关系不完整(如漏了 DNS、证书、配置中心、消息队列);
- 容量不足(灾备中心的资源规格低于生产,切换后撑不住);
- 人员不熟悉流程,慌乱中出错。
实践:
- 定期演练(如每年 1–2 次);
- 演练要真正切换流量(而非只是单机测试);
- 记录和改进。
另一个常被忽略的:依赖的完整性
灾备环境不只是应用和数据库——还有:
- DNS / 负载均衡;
- 身份认证系统;
- 配置中心;
- 消息队列、缓存;
- 第三方服务的连通性和配额;
- 监控和告警系统本身。
监控系统放在被监控的区域内,是一个典型的设计错误——区域故障时你既丢了服务,也丢了观测能力。
一句话
灾备的价值不在于"架构图画得好",而在于真实灾难发生时能切换成功——这只能靠演练来验证。
说明:本文为灾备架构的知识整理。