
1) 【一句话结论】采用“主备+多活+实时数据同步+自动故障切换”的高可用架构,通过心跳检测、快速切换与数据一致性保障机制,确保服务器故障时服务秒级恢复。
2) 【原理/概念讲解】容灾方案的核心是构建高可用架构,实现故障时服务的快速恢复。首先,高可用架构分为主备(Active-Standby)和多活(Active-Active)模式:
3) 【对比与适用场景】
| 模式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 主备(Active-Standby) | 一台主服务器提供服务,一台备用服务器不提供服务,故障时切换 | 主服务器负载高,备用空闲,切换时需预热数据 | 对服务可用性要求极高(如课程回放核心服务),单点故障风险大 | 切换时可能存在数据延迟(异步同步),切换成本高 |
| 多活(Active-Active) | 多台服务器同时提供服务,故障时部分切换 | 负载均衡,故障时部分服务器承担更多负载 | 用户量大的场景(如多地域部署课程回放),需要高并发 | 需处理多活下的数据一致性(如分布式事务、最终一致性) |
4) 【示例】
伪代码展示主备切换流程:
# 主备切换流程伪代码
while True:
# 心跳检测备用服务器健康状态(每秒1次)
if not check_standby_health():
# 触发切换
switch_to_standby()
# 同步最新数据(从主拉取课程回放数据,预热)
sync_latest_data()
# 验证服务可用性(调用API检查课程列表返回正常)
if verify_service_availability():
break
else:
# 重试切换(最多3次,间隔1秒)
retry_switch(3, 1)
5) 【面试口播版答案】(约90秒)
“面试官您好,针对课程录制回放服务的容灾方案,我核心思路是采用‘主备+多活+实时数据同步+自动故障切换’的高可用架构,确保服务器故障时服务秒级恢复。首先,架构上采用主备+多活结合:主服务器负责日常服务,备用服务器通过MySQL binlog或Kafka实时同步数据,多活服务器分担负载。当检测到主服务器故障时,通过每秒发送健康检查请求(如数据库查询)快速感知,自动切换到备用服务器,同时从主拉取最新课程回放数据(预热),切换后调用API验证服务是否正常(如返回课程列表)。数据同步方面,采用MySQL主从复制(异步复制,但通过心跳检测监控同步延迟,若延迟超过阈值则触发补偿),避免故障时数据不一致。加入熔断机制,主故障时前端快速熔断,避免请求积压;降级功能(如暂时不提供高级搜索)减少系统压力。最后,每月做容灾演练(模拟主服务器宕机),验证切换时间是否在秒级内,确保方案有效性。这样,即使服务器故障,也能快速恢复服务,保障用户正常使用课程回放。”
6) 【追问清单】
7) 【常见坑/雷区】