
1) 【一句话结论】
采用微服务架构,以WebRTC+信令服务器为核心实时通信,结合RTMP服务器+CDN加速音视频流,消息队列解耦音视频处理,多机房容灾,确保百万级用户同时在线的直播课系统低延迟、高可用。
2) 【原理/概念讲解】
讲解直播课系统的核心组件及原理:
3) 【对比与适用场景】
| 组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 信令服务器 | 负责用户连接建立、媒体能力交换的中间服务器 | 处理大量短连接,支持会话管理 | WebRTC连接建立 | 需高并发处理,单点故障影响连接 |
| WebRTC | 端到端音视频/数据传输协议 | 低延迟,端到端加密 | 直播课音视频传输 | 需信令服务器辅助建立连接 |
| RTMP服务器 | 音视频流传输服务器(如Nginx-RTMP) | 支持RTMP协议,处理音视频流转发 | 音视频流从服务器到客户端传输 | 需结合CDN加速,避免服务器带宽瓶颈 |
| CDN | 内容分发网络 | 将内容缓存到边缘节点,用户就近访问 | 音视频流分发,提升访问速度 | 需与RTMP服务器配合,缓存音视频流 |
| 消息队列(Kafka) | 分布式消息系统,解耦生产者与消费者 | 高吞吐、持久化、异步 | 音视频流处理(录制、转码、分发) | 延迟通常在毫秒级,需优化以减少对实时性的影响 |
| 负载均衡(Nginx) | 分发请求至多实例的服务器 | 均匀分布请求,提升系统吞吐 | 整个系统请求分发 | 需配置会话保持(如cookie),避免状态不一致 |
4) 【示例】
信令服务器转发SDP的流程(用户A向用户B发起连接):
用户A连接信令服务器,发送SDP:
{
"type": "offer",
"from": "userA",
"to": "userB",
"sdp": "v=0\r\no=- 123456 7890 IN IP4 192.168.1.1\r\ns=WebRTC Call\r\nc=IN IP4 192.168.1.1\r\nm=audio 10000 RTP/AVP 0\r\nm=video 10001 RTP/AVP 94\r\na=media-candidate:... (ICE候选地址)"
}
信令服务器将SDP转发给用户B,用户B返回SDP(answer),信令服务器再转发给用户A,用户A和用户B根据SDP建立WebRTC连接,直接传输音视频流。同时,RTMP服务器接收音视频流(如录制后转码为H.264),通过CDN分发到用户端。
5) 【面试口播版答案】
(约90秒)
“面试官您好,针对百万级用户同时在线的在线教育直播课系统,我的设计思路是采用微服务架构,以实时通信技术为核心。首先,系统核心是WebRTC技术,用于端到端音视频传输,但需要信令服务器辅助建立连接(比如用户A和用户B通过信令服务器交换媒体流信息后,直接建立WebRTC连接)。技术选型上,信令服务器用Go语言实现,部署多实例,通过Nginx负载均衡。音视频流处理用Kafka消息队列,解耦生产者和消费者,支持高吞吐。前端用WebSocket连接信令服务器,实时交换信令。缓存层用Redis缓存用户状态、课程信息,减少数据库压力。数据库方面,MySQL按课程ID分库、按时间分表,MongoDB存储日志。高并发处理上,负载均衡Nginx分发请求,Redis缓存热点数据,消息队列处理音视频流。容灾方案采用多机房部署,主备切换,RTO控制在秒级。另外,音视频流传输采用RTMP服务器结合CDN加速,将音视频流缓存到CDN节点,用户就近访问,减少服务器带宽压力。总结来说,通过微服务拆分、实时通信技术、消息队列、缓存和数据库分片,以及多机房容灾和CDN加速,确保系统支持百万级用户同时在线,保证低延迟和高可用。”
6) 【追问清单】
7) 【常见坑/雷区】