51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

好未来在线教育平台需要支持千级用户同时在线的视频直播课,要求低延迟(≤200ms)、高可用(单点故障不影响直播)。请设计该直播系统的架构,说明前端、传输、后端的关键组件(如Nginx、WebSocket、Kafka、流媒体服务器),并解释如何处理高并发和低延迟。

好未来Java难度:中等

答案

1) 【一句话结论】:采用“边缘节点+低延迟传输协议+分布式消息队列+高可用流媒体集群”架构,通过Nginx负载均衡、WebSocket实时通信、Kafka事件分发、Nginx-RTMP集群处理音视频流,结合CDN加速,实现千级用户≤200ms延迟、单点故障不影响的高可用直播。

2) 【原理/概念讲解】:老师口吻解释各组件:

  • Nginx:作为反向代理和负载均衡器,分发用户请求到后端流媒体服务器,支持WebSocket/HTTP/2,配置高并发连接数(如连接数上限10000,工作进程数根据CPU核心数调整)。类比:像交通枢纽调度车辆,避免单点过载。
  • WebSocket:全双工通信协议,实时传输数据,比轮询减少延迟,用于客户端与边缘节点建立实时连接。特性:单连接多数据,低延迟。使用场景:实时音视频控制、用户状态同步。
  • Kafka:分布式消息队列,用于分发控制指令(如用户加入/离开)、日志收集,解耦后端与流媒体服务。配置:分区数(如16,根据并发用户数调整),副本数(如3,保证高可用)。作用:保证消息可靠传递,支持高吞吐。
  • Nginx-RTMP:流媒体服务器,处理音视频流的编码、传输,支持多用户并发。配置:并发连接数(如5000,根据硬件资源调整),负载均衡算法(如轮询+权重)。特性:RTMP协议传输,支持多路流并发。
  • CDN:边缘节点缓存静态资源或音视频流,减少网络跳数,降低延迟。配置:选择靠近用户的节点(如北京、上海、广州等),缓存策略(如全缓存、动态缓存)。

3) 【对比与适用场景】:

组件/协议定义特性使用场景注意点(工程参数)
Nginx反向代理、负载均衡器高并发、低延迟、支持WebSocket/HTTP/2前端请求分发、后端服务负载均衡连接数上限10000,工作进程数=CPU核心数*2
WebSocket全双工通信协议实时、低延迟、单连接多数据实时音视频、聊天、直播控制需服务器支持(如Nginx、Tomcat)
Kafka分布式消息队列高吞吐、持久化、容错消息分发、日志收集、事件驱动分区数16,副本数3,主题分区数与并发用户数相关
Nginx-RTMP流媒体服务器RTMP协议、多用户并发、编码支持音视频流传输(直播、点播)并发连接数5000,负载均衡算法轮询+权重
CDN内容分发网络边缘节点缓存、减少网络跳数静态资源、音视频流加速选择靠近用户的节点,缓存策略全缓存

4) 【示例】:请求流程(前端→边缘节点→流媒体服务器→后端):

  • 前端:用户通过WebSocket连接边缘节点(如CDN的Nginx),发送加入直播请求(JSON格式)。
  • 边缘节点:Nginx接收请求,将音视频流请求转发到流媒体服务器(Nginx-RTMP集群)。
  • 流媒体服务器:接收编码后的音视频流(RTMP推流),存储并分发到客户端(通过RTMP拉流)。
  • 后端:通过Kafka接收用户加入/离开事件,更新用户状态,通知流媒体服务器调整流路径(如用户离开时关闭流)。

伪代码(前端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) 【追问清单】:

  • 问:如何处理网络抖动或丢包导致的音视频卡顿?
    回答要点:采用前向纠错(FEC)、RTMP流控制机制,动态调整码率,结合CDN节点选择减少丢包。
  • 问:流媒体服务器如何支持千级用户并发?
    回答要点:通过Nginx-RTMP集群部署(多实例),负载均衡算法(轮询+权重),配置高并发连接数(如5000),结合硬件资源(CPU、内存)优化。
  • 问:如何保证用户加入直播的实时性?
    回答要点:WebSocket实时连接(低延迟),Kafka快速消息分发(分区数16,吞吐高),确保用户加入指令及时到达流媒体服务器。
  • 问:如果流媒体服务器故障,如何快速恢复?
    回答要点:集群部署(多节点),健康检查(心跳检测),故障时自动切换到备用节点,Kafka持久化消息保证状态恢复。
  • 问:如何优化延迟,比如减少RTMP传输延迟?
    回答要点:使用CDN边缘节点(靠近用户),优化编码参数(降低码率),支持低延迟协议(如WebRTC,若适用)。

7) 【常见坑/雷区】:

  • 忽略网络抖动处理:只考虑延迟,忽略丢包导致卡顿,应补充FEC等机制。
  • 缺乏故障恢复机制:单点故障影响服务,应设计集群、健康检查、自动切换。
  • 工程参数配置不当:如Kafka分区数、Nginx连接数设置不合理,影响吞吐或可靠性。
  • 协议选择不当:用HTTP长轮询代替WebSocket导致高延迟,需明确WebSocket优势。
  • 缓存策略错误:流媒体内容缓存位置不当,导致用户获取延迟,应使用CDN缓存。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1