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

设计一个支持百万级用户同时在线的直播课系统(类似好未来在线的直播课功能),需要考虑哪些核心模块和技术选型,如何保证低延迟(如毫秒级)和系统稳定性?请从架构设计、技术选型、容灾方案等方面展开说明。

好未来前端 - Web难度:困难

答案

1) 【一句话结论】

百万级用户直播课系统需以WebRTC为核心实现端到端低延迟,通过微服务拆分(信令、媒体、流处理、互动、用户管理),结合消息队列(Kafka)异步处理、CDN加速及多数据中心容灾,保障毫秒级延迟与系统稳定性。

2) 【原理/概念讲解】

老师口吻解释各模块核心逻辑:

  • 信令服务器:负责用户连接建立、房间创建、用户加入房间等,类似“会议前的协调中心”,用户通过WebSocket连接信令服务器,交换SDP(Session Description Protocol)和ICE(Interactive Connectivity Establishment)候选,建立WebRTC连接。同时,信令服务器集成WebRTC的NACK(丢包重传)和FEC(前向纠错),减少网络抖动对延迟的影响。
  • 媒体服务器(如SRS):接收教师端推流(RTMP协议),转码为多码率(如720P、480P),通过HLS/HTTP Live Streaming推送给学生端,适应不同网络带宽。支持多实例部署,通过负载均衡(如Nginx的upstream模块)分发推流任务,提高吞吐量。
  • 流处理层:处理流数据转码、分片,通过消息队列(如Kafka)异步处理,避免阻塞主流程。采用按用户ID或流ID分区,保证消息顺序性,并设置消息积压处理机制(如死信队列),防止消息堆积导致延迟。
  • 实时互动模块:包括弹幕、实时问答、投票。弹幕:用户端发送消息到信令服务器,信令服务器通过消息队列将消息推送到所有学生端;问答:用户输入问题,信令服务器将问题推送给教师端,教师端回复后通过消息队列推送给所有学生;投票:用户选择选项,信令服务器通过消息队列同步投票结果。用户管理通过JWT(JSON Web Token)验证身份,房间密钥校验确保只有授权用户进入直播课。
  • 用户管理:用户认证、动态权限验证,确保系统安全。例如,用户登录后生成JWT,包含用户ID和房间权限,信令服务器验证JWT后允许用户加入房间。
  • 容灾方案:多数据中心部署,通过全局负载均衡(如AWS Global Accelerator)分发请求,数据库主从同步(如MySQL主从复制)保障数据一致性。跨区域数据同步采用低延迟数据库(如Redis Cluster)或缓存一致性协议(如Redis的发布订阅),减少实时互动的响应延迟。

3) 【对比与适用场景】

信令技术对比(WebRTC vs WebSocket):

技术方案定义特性使用场景注意点
WebRTC基于UDP的实时通信技术,支持端到端传输低延迟(毫秒级),自动处理网络抖动,内置NACK/FEC百万级用户直播课(视频、音频、数据流)需要信令服务器辅助建立连接,实现复杂度较高
WebSocket基于TCP的长连接,双向实时通信实时性强,实现简单,扩展性好小规模(几十万用户)实时通信扩展性有限,网络抖动处理能力弱,延迟较高

4) 【示例】

WebRTC连接建立流程(伪代码,展示NACK和FEC的作用):

// 教师端(推流端)代码片段
const peerConnection = new RTCPeerConnection();
// 添加ICE候选
peerConnection.addIceCandidate({ candidate: iceCandidate });
// 设置NACK和FEC
peerConnection.setConfiguration({
  iceTransportPolicy: 'all',
  rtcpMuxPolicy: 'sendonly',
  rtcpFeedback: ['nack', 'dtx', 'frmr']
});
// 接收学生端反馈
peerConnection.onnegotiationneeded = () => {
  peerConnection.createOffer().then(offer => {
    peerConnection.setLocalDescription(offer);
    // 发送SDP到信令服务器
  });
};

// 学生端(拉流端)代码片段
const peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = event => {
  if (event.candidate) {
    // 发送ICE候选到信令服务器
  }
};
peerConnection.ontrack = event => {
  // 播放视频流
};
// 处理NACK和FEC
peerConnection.onremb = event => {
  // 重传丢失的包
};

5) 【面试口播版答案】

面试官您好,百万级用户直播课系统设计核心是构建低延迟、高并发的实时通信架构。首先,架构上采用微服务拆分,核心模块包括信令服务器、媒体服务器、流处理层、实时互动模块(弹幕、问答、投票)及用户管理。信令服务器用WebSocket处理用户连接,建立WebRTC连接,同时集成NACK(丢包重传)和FEC(前向纠错),减少网络抖动对延迟的影响;媒体服务器(如SRS)接收教师端RTMP推流,转码为多码率HLS,通过CDN分发,支持多实例负载均衡。流处理通过Kafka异步处理,按用户ID分区保证消息顺序,避免阻塞。互动模块中,弹幕通过消息队列实时推送到所有学生端,问答系统将用户问题推送给教师端,教师回复后同步给所有学生,投票结果实时更新。用户管理通过JWT验证身份,房间密钥校验确保安全。容灾方面,多数据中心部署,负载均衡分发请求,数据库主从同步保障数据一致。低延迟通过WebRTC端到端传输,减少中间环节;稳定性通过CDN加速、消息队列缓冲、多服务器集群实现。总结来说,通过技术选型与架构设计,保障百万级用户同时在线的直播课低延迟和系统稳定。

6) 【追问清单】

  1. 网络抖动导致连接中断:如何处理?
    • 回答要点:通过WebRTC的ICE候选和NAT穿透,结合自动重连机制,用户断线后自动重连,恢复连接。
  2. 消息队列保证流数据顺序性:如何实现?
    • 回答要点:使用Kafka的分区机制,按用户ID或流ID分配分区,确保顺序写入,结合消息持久化(如日志存储)和ACK机制确认接收。
  3. CDN回源压力:如何优化?
    • 回答要点:采用多CDN节点(如阿里云CDN、腾讯云CDN),结合HLS缓存策略(如预加载、动态码率调整),减少回源压力。
  4. 教师端与多学生端流处理:如何高效?
    • 回答要点:媒体服务器支持多流并发处理,通过负载均衡分配任务,提高吞吐量,同时优化转码策略(如按需转码,避免实时转码)。
  5. 实时问答系统如何避免消息丢失?
    • 回答要点:使用消息队列的持久化机制,确保消息可靠投递,结合ACK机制确认接收,若超时未确认则重发。

7) 【常见坑/雷区】

  1. 忽略WebRTC的NACK/FEC技术,导致网络丢包时延迟显著增加。
  2. 消息队列选择不当(如RabbitMQ默认顺序性不足),影响弹幕或问答的顺序,导致用户体验差。
  3. CDN回源压力过大,未考虑多节点或缓存策略,导致视频加载延迟。
  4. 忽略用户权限控制,导致未授权用户进入直播课,引发安全风险。
  5. 媒体服务器性能不足,未做负载均衡或优化,导致推流延迟,影响视频质量。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1