
1) 【一句话结论】:采用分层架构(CDN+边缘计算+WebRTC实时流处理),通过WebRTC的P2P低延迟通信与信令服务器辅助,结合负载均衡多节点部署,保障数百学生同时在线的低延迟和高可用。
2) 【原理/概念讲解】:同学们,要解决数百学生同时在线的直播低延迟和高可用,核心是拆解为“传输效率”和“系统稳定性”。
3) 【对比与适用场景】:
| 架构组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| WebRTC | 基于P2P的实时音视频通信技术(含信令、RTP/RTCP、ICE模块) | 低延迟(毫秒级),支持自然互动,需信令服务器辅助 | 大规模实时互动(如在线课堂、视频会议) | P2P连接受防火墙/NAT限制,需STUN/TURN服务器 |
| RTMP/HTTP-FLV | 传统的流媒体传输协议(服务器推流,客户端拉流) | 传输稳定,延迟较高(秒级),需CDN加速 | 传统直播,延迟要求不高的场景 | 依赖服务器中转,延迟高,适合低互动直播 |
4) 【示例】:伪代码展示信令与媒体流处理。
示例:用户A连接信令服务器(coturn),发送本地SDP,信令服务器转发给用户B,用户B处理SDP后建立P2P连接,媒体流通过WebRTC传输。同时,CDN节点预缓存直播流,用户从边缘节点拉流。
// 用户A发起连接请求
POST /signaling/connect
{
"userId": "student_A",
"ip": "192.168.1.100",
"port": 12345
}
// 信令服务器返回初始SDP
{
"sdp": "v=0...m=video 1234 RTP/AVP 100...",
"iceServers": ["stun:stun.l.google.com:19302"]
}
// 用户A发送本地SDP
POST /signaling/sendSDP
{
"userId": "student_A",
"sdp": "v=0...m=video 1234 RTP/AVP 100..."
}
// 信令服务器转发给用户B
POST /signaling/sendSDP
{
"userId": "student_B",
"sdp": "v=0...m=video 1234 RTP/AVP 100..."
}
// 用户B处理SDP后,通过ICE协议建立P2P连接,媒体流直接传输
5) 【面试口播版答案】:
“面试官您好,针对数百学生同时在线的直播课堂系统,保障低延迟和高可用,核心是采用分层架构,结合WebRTC技术和CDN边缘计算。具体来说,低延迟方面,通过WebRTC的P2P直接通信,减少服务器中转,配合信令服务器(如coturn)处理连接建立,延迟控制在200ms以内;高可用则通过Nginx负载均衡分发请求,多节点部署并同步数据(如Redis缓存用户状态),避免单点故障。比如,用户请求时,Nginx将请求转发到最近的媒体服务器,CDN节点预缓存直播流,用户从边缘节点拉流,既能保证低延迟,又能通过多副本实现高可用,满足大规模实时互动需求。”
6) 【追问清单】:
7) 【常见坑/雷区】: