
1) 【一句话结论】
针对交易系统,采用RPO=0(数据无丢失)、RTO≤5分钟的混合容灾架构,主备中心异地部署,通过异步复制(延迟≤1分钟)结合MySQL binlog回放确保数据同步,自动化心跳检测与切换,保障主中心故障时业务秒级接管,数据一致性无损失。
2) 【原理/概念讲解】
老师口吻:容灾方案的核心是平衡数据丢失(RPO)与恢复时间(RTO)。RPO是允许的最大数据丢失量,交易系统需RPO=0(无数据丢失,如订单、账户数据);RTO是故障后恢复时间,需≤5分钟(业务连续性要求)。容灾架构分高可用(HA,同一数据中心冗余,解决本地故障,如服务器宕机,RTO秒级,RPO=0)和容灾(DR,异地部署,解决跨区域故障,如地震,RTO分钟级,RPO由同步方式决定)。数据同步方式:同步复制(实时同步,RPO=0,但网络延迟高时性能下降,适合关键业务);异步复制(延迟同步,RPO>0,适合允许延迟的业务,如市场数据,需监控延迟避免不一致)。类比:银行交易,主中心宕机时,灾备中心需立即接管,不能有数据丢失(RPO=0),但异地部署导致网络延迟,所以用异步复制但设置延迟阈值(如1分钟),确保延迟内数据同步。
3) 【对比与适用场景】
| 架构类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 高可用(HA) | 同一数据中心主备服务器冗余,故障时自动切换 | RTO极低(秒级),RPO=0(本地同步),无业务中断 | 关键业务,本地故障(如服务器宕机、网络中断) | 成本高,仅解决本地故障,跨区域故障无效 |
| 容灾(DR) | 异地数据中心主备,主中心故障时切换 | RTO根据同步方式(同步RTO低,异步RTO高),RPO根据同步方式(同步RPO=0,异步RPO>0) | 主中心故障(如地震、断电、网络中断),跨区域业务连续性 | 需考虑网络延迟,数据一致性,灾备中心启动时间 |
| 同步复制 | 主备数据实时同步,写操作先写入主,再写入备 | RPO=0,RTO低(秒级),但增加主库负载,网络延迟敏感 | 对数据一致性要求极高(如交易系统核心表:订单、账户) | 性能影响大,网络延迟高时可能导致主库阻塞 |
| 异步复制 | 主备数据异步同步,写操作先写入主,再异步写入备 | RPO>0(延迟内数据丢失),RTO较高(分钟级),网络延迟容忍 | 对延迟容忍的业务(如市场数据、日志记录) | 需监控延迟,设置延迟阈值(如RPO=1分钟),避免数据不一致 |
4) 【示例】
数据同步流程(异步复制,基于MySQL binlog):
def sync_data_from_main():
binlog = main_db.get_binlog() # 从主中心拉取binlog日志
transactions = parse_binlog(binlog) # 解析binlog生成待同步事务
for txn in transactions:
dr_db.async_write(txn) # 异步写入灾备数据库
delay = calculate_delay() # 计算主备数据延迟
if delay > 60: # 超过1分钟延迟,触发告警
raise DelayAlarm(delay)
def trigger_dr_switch():
if not check_heartbeat(): # 心跳检测(秒级)
if is_main_failed():
start_dr_center() # 冷备启动(启动时间≤2分钟)
mark_as_primary() # 标记为主
verify_data_consistency() # 回放binlog验证一致性
resume_business() # 应用自动重连
5) 【面试口播版答案】
面试官您好,针对交易系统的容灾方案,核心是构建RPO=0、RTO≤5分钟的混合架构。主备中心异地部署,通过异步复制(延迟≤1分钟)确保数据同步,结合MySQL binlog回放保证一致性。切换流程是自动化心跳检测(故障时无人工干预),灾备中心冷备启动时间≤2分钟,应用自动重连。当主中心故障时,灾备中心秒级接管,数据无丢失,业务5分钟内恢复,满足Global Markets业务连续性要求。
6) 【追问清单】
7) 【常见坑/雷区】