51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

好未来的课程录制系统需要保证高可用(如直播课录制不中断),并支持故障恢复(如服务器宕机)。请设计一个容灾方案,并说明如何实现故障检测与切换?同时,考虑数据一致性(录制数据与回放数据的同步)?

好未来C++难度:困难

答案

1) 【一句话结论】:采用多节点主从/多活部署架构,通过心跳+状态检查实现故障检测与自动切换,结合事务日志/消息队列保证录制与回放数据最终一致性,确保高可用与故障恢复。

2) 【原理/概念讲解】:高可用系统需多节点协同避免单点故障。故障检测常用心跳机制(主节点定期向从节点发送心跳,从节点响应状态)或状态检查(从节点检查主节点日志/状态文件是否同步)。故障切换时,从节点检测到主节点超时/无响应,通过选举机制(如ZooKeeper的Leader选举)切换为主。数据一致性方面,录制数据写入主节点后,通过**消息队列(如Kafka)或分布式事务(如MySQL XA)**同步到从节点;回放数据则通过定时同步或事件驱动同步,确保最终一致。

类比:银行系统,主服务器是总行,从服务器是分行备份,总行宕机时,分行切换为总行,客户交易数据通过实时同步保证一致。

3) 【对比与适用场景】:

方案定义特性使用场景注意点
主从复制(同步)主节点处理请求,数据同步到从节点读写分离,从节点可读,故障时切换为主需低延迟(如数据库读写)同步延迟可能导致数据不一致
主从复制(异步)主节点写入后异步复制读写分离,从节点延迟读对延迟容忍(如日志存储)延迟可能导致数据丢失
多活部署多节点同时处理请求,无主从所有节点可读可写高并发(如电商系统)需分布式事务或最终一致性
心跳检测主节点定期向从节点发送心跳低延迟检测实时系统心跳间隔过短增加网络开销
状态检查从节点检查主节点日志或状态文件高可靠性检测关键系统检查频率影响检测延迟

4) 【示例】:伪代码展示主从节点数据同步与故障切换。

// 主节点处理录制请求
void Master::recordLesson(const LessonInfo& info) {
    logRecord(info);          // 写入本地日志
    sendToSlave(info);        // 通过Kafka同步到从节点
    return true;
}

// 从节点接收并同步数据
void Slave::receiveRecord(const LessonInfo& info) {
    logRecord(info);          // 同步日志
    updateData(info);         // 更新本地数据
}

// 从节点检测主节点故障并切换
void Slave::checkMaster() {
    if (isMasterDown()) {     // 检测主节点宕机
        electAsMaster();      // 选举为主节点
        startMasterService();  // 启动主节点服务
    }
}

5) 【面试口播版答案】:
(约80秒)
“面试官您好,针对课程录制系统的高可用和故障恢复需求,我设计的容灾方案核心是采用多节点主从/多活部署架构,结合故障检测与自动切换机制,同时保证录制与回放数据的一致性。系统部署多个录制节点,主节点负责处理录制请求,从节点通过心跳和日志同步数据。故障检测方面,主节点定期向从节点发送心跳,从节点响应状态,若主节点超时,从节点通过状态检查(如日志文件是否同步)判断故障,并启动选举机制切换为主。数据一致性方面,录制数据写入主节点后,通过消息队列(如Kafka)异步同步到从节点,回放数据则通过定时任务或事件驱动同步,确保最终一致。这样,即使主节点宕机,从节点能快速切换,保证录制不中断,数据同步后回放正常。”

6) 【追问清单】:

  • 问:如何保证录制数据与回放数据的同步?
    答:通过事务日志或消息队列,主节点写入后同步到从节点,回放数据通过定时同步或事件触发,确保最终一致。
  • 问:故障检测的延迟和误判怎么办?
    答:心跳间隔设置合理(如1秒),结合状态检查(如日志检查),减少误判,同时设置超时阈值避免延迟检测。
  • 问:切换时数据丢失怎么办?
    答:采用异步复制,确保主节点宕机前数据已同步到从节点,或通过事务日志回滚未提交的数据。
  • 问:多活部署下如何处理并发冲突?
    答:引入分布式锁(如Redis锁)或乐观锁,保证数据一致性,同时通过消息队列解耦处理。

7) 【常见坑/雷区】:

  • 坑1:只说主从复制但没考虑多活,导致高并发时性能瓶颈。
  • 坑2:数据同步只说同步但没考虑延迟,导致回放数据不一致。
  • 坑3:故障检测只依赖心跳,没考虑状态检查,导致误判或延迟检测。
  • 坑4:切换时没考虑回放数据的同步,导致回放数据丢失或延迟。
  • 坑5:没考虑分布式事务的复杂性,导致数据一致性问题。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1