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

设计一个支持百万级用户同时在线的在线直播课系统,需要考虑实时音视频传输、互动消息(弹幕、问答)、课程回放等功能,请描述系统架构、关键技术选型及高并发处理方案。

好未来后端 - Java难度:困难

答案

1) 【一句话结论】
百万级用户在线直播课系统需通过微服务拆分(直播、互动、回放服务),结合WebRTC实现客户端间P2P低延迟音视频传输(信令服务器调度),消息队列解耦实时消息,回放服务转码为HLS并CDN加速,同时通过负载均衡、缓存、异步处理等方案保障高并发下的低延迟与高可用。

2) 【原理/概念讲解】
老师口吻:系统核心是三大服务协同工作,各司其职:

  • 直播服务:负责音视频流传输,采用WebRTC技术,客户端间P2P直接连接(低延迟),信令服务器(WebSocket)作为“调度中心”,负责交换SDP(会话描述)和ICE(网络连接)候选,减少服务器中转压力。
  • 互动消息服务:处理弹幕、问答等实时消息,用消息队列(如Kafka)解耦生产(用户发送)与消费(推送),避免实时阻塞。
  • 回放服务:将直播流转码为HLS(分段MP4+M3U8),存储到对象存储(如阿里云OSS),通过CDN加速点播,提升用户加载体验。

3) 【对比与适用场景】

对比项WebRTCWebSocket
定义基于Web的实时音视频通信API基于TCP的长连接,双向文本/二进制通信
特性P2P直接连接,低延迟,无需服务器中转服务器中转,支持实时文本,延迟较高
使用场景音视频直播(如在线课堂)弹幕推送、实时消息(非音视频)
注意点需信令服务器,处理ICE候选复杂简单文本通信,易实现,但延迟高

4) 【示例】

  • 用户加入直播流程(伪代码):
    POST /join?courseId=101, userId=202
    - Nginx负载均衡分发到直播服务
    - 直播服务检查权限,创建会话ID
    - 发送信令请求到信令服务器(WebSocket)
      - 请求:{userId: 202, course: 101, type: offer}
    - 信令服务器返回SDP(offer)给客户端
    - 客户端生成answer,发送给信令服务器
    - 信令服务器转发answer给直播服务
    - 直播服务与客户端建立P2P连接,推流
    
  • 弹幕发送流程:
    POST /danmu?courseId=101, userId=202, content="老师讲得好"
    - 负载均衡到互动消息服务
    - 互动消息服务将消息入Kafka(topic: danmu_101)
    - 消费者(推送服务)从Kafka读取,通过WebSocket推送到所有在线用户
    

5) 【面试口播版答案】
面试官您好,针对百万级用户在线直播课系统,核心是“微服务拆分+实时通信+高并发解耦”。系统拆分为三大服务:直播服务(负责音视频传输)、互动消息服务(弹幕/问答)、回放服务(课程回放)。直播采用WebRTC技术,通过信令服务器(WebSocket)交换SDP和ICE候选,实现客户端间P2P低延迟音视频传输,就像两个用户直接通话,信令服务器是调度中心。互动消息用消息队列(如Kafka)解耦,用户发弹幕后,先入队列,再由消费者异步推送到所有在线用户,避免实时阻塞。回放服务将直播流转码为HLS,存储到阿里云OSS,通过CDN加速点播,用户加载快。高并发通过Nginx负载均衡分发请求,Redis缓存热点数据(如用户信息、弹幕列表),异步任务处理非实时逻辑(如弹幕存储)。这样整体架构能支撑百万级并发,保证低延迟和高可用。

6) 【追问清单】

  • 问:信令服务器如何保证高并发下的低延迟?
    答:采用集群部署(如Nginx+多个信令节点),缓存SDP信息(预热缓存,减少实时计算),负载均衡分发请求。
  • 问:消息队列的延迟如何控制?
    答:设置Kafka分区数(根据并发量,如每个课程一个分区),消费者线程数(与服务器CPU核数匹配),确保消息1秒内处理。
  • 问:回放存储的冷热数据如何处理?
    答:热数据(近期回放,如最近7天)存储在OSS+CDN,冷数据(历史)归档到低成本存储(如S3 Glacier),按需转码。
  • 问:如何处理P2P连接失败?
    答:检测P2P连接状态(如超时),失败时切换到RTMP服务器中转,保证音视频不中断。
  • 问:系统如何保证数据一致性?
    答:弹幕消息通过消息队列保证顺序,使用事务消息(如RocketMQ事务消息)确保最终一致性,失败时补偿。

7) 【常见坑/雷区】

  • 忽略信令服务器瓶颈:若信令服务器单点,会导致用户加入延迟,应集群化并缓存。
  • 消息队列未考虑幂等性:弹幕重复发送会导致重复推送,需在处理端检查消息ID。
  • 存储分层不合理:直播流直接存储大文件,未转码为HLS,导致回放加载慢,应提前转码并缓存。
  • 缓存雪崩:所有用户同时访问缓存,导致缓存服务器崩溃,需设置缓存过期时间并预热。
  • 忽略P2P切换机制:用户网络不好时,P2P连接失败应切换到服务器中转,否则音视频中断。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1