
百万级用户直播课系统需以WebRTC为核心实现端到端低延迟,通过微服务拆分(信令、媒体、流处理、互动、用户管理),结合消息队列(Kafka)异步处理、CDN加速及多数据中心容灾,保障毫秒级延迟与系统稳定性。
老师口吻解释各模块核心逻辑:
信令技术对比(WebRTC vs WebSocket):
| 技术方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| WebRTC | 基于UDP的实时通信技术,支持端到端传输 | 低延迟(毫秒级),自动处理网络抖动,内置NACK/FEC | 百万级用户直播课(视频、音频、数据流) | 需要信令服务器辅助建立连接,实现复杂度较高 |
| WebSocket | 基于TCP的长连接,双向实时通信 | 实时性强,实现简单,扩展性好 | 小规模(几十万用户)实时通信 | 扩展性有限,网络抖动处理能力弱,延迟较高 |
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 => {
// 重传丢失的包
};
面试官您好,百万级用户直播课系统设计核心是构建低延迟、高并发的实时通信架构。首先,架构上采用微服务拆分,核心模块包括信令服务器、媒体服务器、流处理层、实时互动模块(弹幕、问答、投票)及用户管理。信令服务器用WebSocket处理用户连接,建立WebRTC连接,同时集成NACK(丢包重传)和FEC(前向纠错),减少网络抖动对延迟的影响;媒体服务器(如SRS)接收教师端RTMP推流,转码为多码率HLS,通过CDN分发,支持多实例负载均衡。流处理通过Kafka异步处理,按用户ID分区保证消息顺序,避免阻塞。互动模块中,弹幕通过消息队列实时推送到所有学生端,问答系统将用户问题推送给教师端,教师回复后同步给所有学生,投票结果实时更新。用户管理通过JWT验证身份,房间密钥校验确保安全。容灾方面,多数据中心部署,负载均衡分发请求,数据库主从同步保障数据一致。低延迟通过WebRTC端到端传输,减少中间环节;稳定性通过CDN加速、消息队列缓冲、多服务器集群实现。总结来说,通过技术选型与架构设计,保障百万级用户同时在线的直播课低延迟和系统稳定。