
1) 【一句话结论】
百万级用户在线直播课系统需通过微服务拆分(直播、互动、回放服务),结合WebRTC实现客户端间P2P低延迟音视频传输(信令服务器调度),消息队列解耦实时消息,回放服务转码为HLS并CDN加速,同时通过负载均衡、缓存、异步处理等方案保障高并发下的低延迟与高可用。
2) 【原理/概念讲解】
老师口吻:系统核心是三大服务协同工作,各司其职:
3) 【对比与适用场景】
| 对比项 | WebRTC | WebSocket |
|---|---|---|
| 定义 | 基于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) 【追问清单】
7) 【常见坑/雷区】