
1) 【一句话结论】:采用“边缘节点+低延迟传输协议+分布式消息队列+高可用流媒体集群”架构,通过Nginx负载均衡、WebSocket实时通信、Kafka事件分发、Nginx-RTMP集群处理音视频流,结合CDN加速,实现千级用户≤200ms延迟、单点故障不影响的高可用直播。
2) 【原理/概念讲解】:老师口吻解释各组件:
3) 【对比与适用场景】:
| 组件/协议 | 定义 | 特性 | 使用场景 | 注意点(工程参数) |
|---|---|---|---|---|
| Nginx | 反向代理、负载均衡器 | 高并发、低延迟、支持WebSocket/HTTP/2 | 前端请求分发、后端服务负载均衡 | 连接数上限10000,工作进程数=CPU核心数*2 |
| WebSocket | 全双工通信协议 | 实时、低延迟、单连接多数据 | 实时音视频、聊天、直播控制 | 需服务器支持(如Nginx、Tomcat) |
| Kafka | 分布式消息队列 | 高吞吐、持久化、容错 | 消息分发、日志收集、事件驱动 | 分区数16,副本数3,主题分区数与并发用户数相关 |
| Nginx-RTMP | 流媒体服务器 | RTMP协议、多用户并发、编码支持 | 音视频流传输(直播、点播) | 并发连接数5000,负载均衡算法轮询+权重 |
| CDN | 内容分发网络 | 边缘节点缓存、减少网络跳数 | 静态资源、音视频流加速 | 选择靠近用户的节点,缓存策略全缓存 |
4) 【示例】:请求流程(前端→边缘节点→流媒体服务器→后端):
伪代码(前端WebSocket连接):
const socket = new WebSocket('wss://edge.haofutui.com/live');
socket.onopen = () => {
socket.send(JSON.stringify({ type: 'join', room: 'class101', userId: 'user123' }));
};
socket.onmessage = (msg) => {
const data = JSON.parse(msg.data);
if (data.type === 'stream') {
// 播放音视频流
const streamUrl = data.url; // 如rtmp://nginx-rtmp-cluster/live/class101/user123
const player = document.createElement('video');
player.src = streamUrl;
player.play();
}
};
5) 【面试口播版答案】(约90秒):
“面试官您好,针对千级用户低延迟高可用直播需求,我设计的架构核心是‘边缘节点+低延迟传输协议+分布式消息队列+高可用流媒体集群’。首先,前端通过WebSocket连接边缘节点(如CDN的Nginx),实现实时通信,避免轮询延迟。边缘节点作为负载均衡器,将请求分发到后端流媒体服务器(Nginx-RTMP集群),处理音视频流传输。后端通过Kafka分发控制消息(如用户加入/离开),解耦服务,保证消息可靠。具体来说,Nginx负责负载均衡(连接数上限10000),WebSocket保持实时连接,Kafka配置分区数16、副本数3,流媒体服务器集群(并发连接数5000)处理音视频流。当单点故障时,Nginx自动切换到备用节点,Kafka持久化消息保证状态恢复,延迟控制在≤200ms。总结来说,通过边缘节点靠近用户、低延迟协议、分布式队列和负载均衡,实现高并发、低延迟、高可用。”
6) 【追问清单】:
7) 【常见坑/雷区】: