
1) 【一句话结论】采用“本地主备+异地多活”混合容灾架构,核心数据通过异步复制+定期备份实现RPO≤5分钟、RTO≤30秒;非核心业务多活,数据通过Redis缓存同步,冲突通过时间戳+锁机制解决,网络分区时多维度检测触发切换,确保故障时快速接管且数据不丢失。
2) 【原理/概念讲解】容灾架构分主备、多活、异地容灾三类:
3) 【对比与适用场景】
| 架构类型 | 定义 | 数据同步方式 | 故障切换时间 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|---|
| 本地主备 | 主服务器运行业务,备用热备 | 核心日志复制(GTID) | 0-30秒 | 成本低,切换后性能恢复快 | 备用服务器利用率低 | 核心业务(用户登录、成绩查询) |
| 异地多活 | 跨区域多台服务器同时处理 | 异步复制+定期备份 | 0-30秒(切换) | 利用率高,区域故障切换 | 需跨区域网络,成本高 | 非核心业务(课程资料、公告) |
| 混合架构(主备+多活) | 核心主备,非核心多活 | 核心日志复制+缓存同步 | 0-30秒(核心)+0秒(非核心) | 平衡成本与可用性 | 需兼顾核心高可用与非核心高并发 | 教育系统(核心业务高可用,非核心高并发) |
| 多活(本地) | 多台本地服务器同时处理 | 部分数据同步(缓存) | 0秒(无切换) | 利用率高,实时负载均衡 | 需处理数据冲突 | 高并发业务(在线学习、互动课程) |
4) 【示例】
故障切换流程伪代码:
def check_master_health():
http_ok = check_http_health() # HTTP健康检查
db_ok = check_db_connection() # 数据库延迟检查
net_ok = check_network_latency() # 网络延迟检查
return http_ok and db_ok and net_ok
def switch_to_backup():
load_balancer.update_backend("backup_server") # 更新负载均衡
# 从binlog断点续传补全数据
sync_data_from_log()
while True:
if not check_master_health():
switch_to_backup()
process_request()
数据冲突处理示例(多活场景):
5) 【面试口播版答案】
面试官您好,针对教育系统的容灾需求,我设计的方案是采用“本地主备+异地多活”混合架构。核心业务(用户管理、成绩系统)采用本地主备,主服务器故障时,通过数据库延迟、网络延迟等多维度监控检测,触发切换,备用服务器通过MySQL GTID日志复制实时同步数据,切换时间控制在30秒内;非核心业务(课程资料、公告)采用异地多活,部署在异地数据中心,通过多路径网络同步,数据丢失率≤5分钟。针对多活下的数据冲突,通过Redis分布式锁和版本号机制,冲突时回滚重试,保证数据一致性。网络分区时,通过心跳检测和断路器技术,避免误判,确保故障时快速切换,整体满足RPO≤5分钟、RTO≤30秒的容灾要求。
6) 【追问清单】
7) 【常见坑/雷区】