题干与适用场景
设计单区域 SaaS 在整区故障后的恢复。最多丢失 1 小时数据(RPO),4 小时内恢复服务(RTO)。假设峰值 1,000 QPS 只是面试容量假设;应用无状态,主库为关系数据库,对象存储保存用户上传文件。恢复对象包括数据、代码、配置、密钥、路由和操作权限。只说“有备份”不足以证明目标可达。
面试官考察点
公开系统设计手册把 RPO/RTO 灾备列为面试场景;AWS 将 RPO/RTO 定义为业务目标,并要求选择策略、测试恢复、管理配置漂移和自动化。强回答应把 RPO 转成复制延迟或备份频率,把 RTO 转成检测、提升、部署、路由和验证预算,并区分数据面与控制面故障。
回答前需要澄清的问题
- 支付、用户资料和分析数据是否共享同一 RPO?按业务影响分层。
- 故障是区域丢失、错误发布还是逻辑损坏?复制能应对前者,时间点备份才能回滚后两者。
- 切换期间是否必须继续写入?若必须,先定义写入权和冲突策略。
- RTO 终点是健康检查、客户流量还是完整功能?运行手册必须写清里程碑。
- 灾备账户是否能独立操作?配额、凭据、镜像和 DNS 权限可能决定目标能否达成。
30 秒回答框架
“我先按业务分层并让 RPO/RTO 可测量,再做跨区域异步复制、时间点备份和对象版本保护。4 小时目标可先采用 pilot light:用 IaC 保存应用栈,故障时提升数据、部署、切路由并做完整性和冒烟检查。季度演练测量每一步,验证备份恢复、配置漂移和实际 RPO/RTO。”
分步骤深入解答
1. 把目标转成预算
RPO 不超过 1 小时,复制延迟或备份间隔必须小于该上限,并设置提前告警;时间点备份用于处理逻辑损坏。RTO 4 小时要拆成检测与宣告、数据提升、应用部署、路由、冒烟和余量。20 分钟恢复数据库、30 分钟部署、10 分钟切流只是待演练验证的假设。
2. 选择拓扑
备份恢复成本低但 RTO 较大;pilot light 常驻数据复制和核心资源,应用容量在故障时开启,适合四小时目标;warm standby 常驻缩小版可运行栈,成本更高但恢复更快;active/active 最快,却引入跨区写冲突、路由和运维复杂度。把镜像、Schema、配置和 IaC 放在灾备账户,保证可重建。
3. 保护数据
异步复制关系库变更到独立区域并监控延迟。只有日志位置和完整性检查符合 RPO 才提升副本。跨账户或跨区域保存不可变时间点备份,处理误删、勒索和错误写入。对象存储启用版本并校验数量和校验和。支付等零丢失领域应单独分层,不能套用一小时目标。
4. 恢复服务路径
从不可变镜像和 IaC 部署应用,预置健康检查、密钥访问、配额和观测。数据库连接、迁移、认证和代表性读写冒烟通过后才切流。AWS 提醒数据面通常比控制面更能在灾难中工作;依赖故障时再创建全部资源会侵蚀 RTO。
5. 让运行手册可安全执行
写明谁宣告灾难、谁提升数据、谁批准切流。每一步采用幂等命令、停止条件、回滚或回切路径,并记录单调递增的步骤日志。容量不足时先关闭非关键功能,保留恢复点和客户状态通知。
6. 用演练证明
定期做恢复、区域 game day 和配置漂移检查。分别测量检测、决策、恢复、提升、部署、路由和稳定时间;校验行数、校验和、权限、队列和后台任务。注入坏备份、旧密钥、配额不足和复制延迟,确保每种情况都有告警或停止条件。
高质量示范回答
“RPO 1 小时、RTO 4 小时,我会采用跨区域异步数据库和对象复制、不可变时间点备份,以及由 IaC 管理的 pilot-light 区域。运行手册预留检测、提升、部署、DNS/全局路由和冒烟检查时间,并在季度演练中测量。切换时选择已验证的恢复点,做完整性校验后提升数据,部署镜像,验证认证和代表性写入,再切流。若主区发生逻辑损坏,复制副本不能直接用,要回到干净的时间点。支付数据另设更严格的层级。”
常见错误
- 只说多区域 → 成本和复杂度没有边界 → 从 RPO/RTO 推导拓扑。
- 把复制当备份 → 损坏和删除会同步 → 保留不可变时间点副本并实测恢复。
- 忽略代码配置 → 有数据却没有可服务的栈 → 版本化镜像、Schema、密钥、配额和 IaC。
- 把改 DNS 算作恢复 → 流量可能到达未验证系统 → RTO 包含提升、冒烟和稳定。
- 从未演练 → 备份、配额和运行手册可能过期 → 定期注入故障并测量。
追问及应对
RPO 为零时怎么办?
异步复制不够,需要同步写入权或产品级暂停写入,再评估延迟、仲裁和跨区分区行为。
如何处理逻辑损坏?
停止提升受污染副本,选择干净时间点恢复到隔离环境,验证不变量后只重放批准变更。
为什么不用 warm standby?
若演练证明部署和扩容能在四小时内完成,pilot light 成本更低;无法承受启动时间时才提高到 warm standby。
如何防止配置漂移?
用版本化 IaC 渲染灾备区,对比镜像、Schema、密钥、配额和路由差异,并把检查放进每次演练。