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

设计一个支持百万级用户同时在线的直播系统,需要考虑低延迟(毫秒级)、高并发、容灾备份,请描述系统架构、关键技术选型及核心模块设计。

快手Java开发工程师 📦 工程类难度:困难

答案

1) 【一句话结论】

采用分布式微服务架构,结合WebRTC+服务器中转(SFU)实现毫秒级低延迟,通过Kafka解耦消息,Redis缓存,多活数据中心容灾,满足百万级用户高并发需求,确保系统稳定与业务连续性。

2) 【原理/概念讲解】

老师口吻解释关键概念:

  • 流媒体传输:直播核心是音视频流传输,需低延迟。RTMP(实时流协议)适合主播端实时推流(音视频上传,延迟约100-200ms),HLS(HTTP Live Streaming)适合观众端播放(回放/点播,延迟约1-2秒),WebRTC支持用户间P2P直接通信(减少服务器中转延迟,延迟<50ms)。百万用户场景下,需结合**服务器中转(SFU/MCU)**处理大规模连接,按用户地理位置分配中转节点,减少单用户延迟约30-50ms(类比:SFU像“智能中转站”,集中处理用户连接,优化路径)。
  • 实时通信:用户加入/离开直播需实时同步状态。通过**长连接(WebSocket)保持连接,结合消息队列(如Kafka)**处理状态变更,确保毫秒级响应(如用户加入时,消息队列快速分发至流处理模块,延迟约1-5ms)。
  • 消息队列:解耦用户连接与直播流处理,避免高并发直接调用数据库。Kafka的高吞吐(百万级消息/秒)、持久化(日志追加,数据恢复时间<1秒)、容错(多副本)适合大规模实时消息处理(如用户加入请求、状态变更通知)。
  • 分布式缓存:缓存用户信息、直播状态(如在线人数、主播信息),减少数据库查询延迟。Redis支持高并发读写(QPS>10万,延迟<1ms),提升系统吞吐。
  • 负载均衡:Nginx/LVS分发请求至多个直播服务节点,避免单点过载,提升系统可用性(IP哈希或权重轮询,动态调整热点用户权重)。

3) 【对比与适用场景】

流媒体传输协议对比(关键场景)

协议定义特性使用场景注意点
RTMP实时流媒体传输协议实时性高,适合直播推流(延迟约100-200ms)主播实时上传音视频需专用服务器,支持实时流传输
HLSHTTP Live Streaming基于HTTP,支持点播/回放观众播放(回放、点播)延迟约1-2秒,适合非实时场景
WebRTC实时通信协议P2P直接通信,低延迟(毫秒级)视频通话、小规模直播需STUN/TURN服务器穿透NAT,百万用户需SFU中转

消息队列对比(高并发场景)

消息队列定义特性使用场景注意点
Kafka分布式消息系统高吞吐(百万级消息/秒)、持久化、容错(多副本)实时数据流处理、日志收集、大规模消息传递适合高并发、低延迟的实时消息,延迟约1-5ms
RabbitMQ企业级消息队列队列模型、可靠、事务支持应用解耦、任务调度(如订单处理)延迟较高(几十ms),适合中小规模任务

4) 【示例】

用户加入直播的请求流程伪代码:

用户请求加入直播(URL: /join?room=123)
1. Nginx负载均衡分发请求到直播服务节点A(IP哈希)
2. 节点A验证用户权限(Redis缓存用户信息,TTL=5分钟)
3. 节点A将请求发送到Kafka主题“live_join”,消息体包含room_id、user_id
4. Kafka将消息分发给流处理节点B、C(消费组)
5. 节点B处理:
   - 创建用户会话(WebRTC会话ID)
   - 生成信令(SIP/SDP,包含ICE候选集)
   - 通过WebSocket发送信令给用户浏览器
6. 用户浏览器建立P2P连接(或通过SFU中转,如地理位置靠近则P2P,否则SFU)
7. 节点B同步用户状态到Redis(在线人数+1,key=room_id:online_users)

5) 【面试口播版答案】

“面试官您好,百万级用户直播系统设计核心是构建低延迟、高并发的分布式架构。首先,流媒体传输采用WebRTC结合服务器中转(SFU),实现毫秒级低延迟;通过Nginx负载均衡分发请求,避免单点过载。实时通信用WebSocket+Kafka解耦,用户状态变更(加入/离开)通过消息队列快速同步,确保毫秒级响应。缓存层用Redis存储用户信息、直播状态,减少数据库压力。容灾备份采用多活数据中心,数据通过Kafka异步复制(延迟约1-2秒),故障时通过健康检查(1秒间隔)快速切换(切换时间≤2秒),保证业务连续性。关键技术选型上,流处理用Kafka(百万级消息吞吐,延迟1-5ms),缓存用Redis(高并发读写,毫秒级响应),负载均衡用Nginx(IP哈希负载均衡)。各模块解耦,支持弹性扩展,既能满足百万用户同时在线的低延迟需求,又能保证高并发下的系统稳定性和容灾能力。”

6) 【追问清单】

  • 问题1:容灾备份的具体实现,比如数据同步的延迟和方案?
    回答要点:多活数据中心通过Kafka异步复制(副本同步策略AR=3,ISR=2),数据同步延迟约1-2秒,故障时通过健康检查(每秒检测)快速切换,切换时间≤2秒,保证数据一致性。
  • 问题2:低延迟优化的具体措施,比如流媒体传输的优化?
    回答要点:WebRTC的ICE候选集管理(自动选择最佳网络路径,减少延迟30-50ms),SFU负载均衡(基于用户地理位置分配节点,减少延迟),以及网络抖动补偿算法(根据历史延迟调整发送时间,避免抖动影响)。
  • 问题3:高并发下消息队列的选型理由,为什么选Kafka?
    回答要点:Kafka的高吞吐(百万级消息/秒)、持久化(日志追加,数据恢复时间<1秒)、容错(多副本),适合大规模实时消息处理;RabbitMQ延迟较高(几十ms),不适合百万级消息吞吐。
  • 问题4:缓存策略,如何避免缓存雪崩?
    回答要点:设置合理缓存过期时间(如5分钟TTL),使用分布式锁(Redis SETNX)控制并发写入,以及缓存预热(冷启动时预加载热门直播数据,如热门主播信息)。
  • 问题5:负载均衡的策略,如何处理热点用户?
    回答要点:Nginx的IP哈希或权重轮询,结合动态调整权重(热点用户请求优先分配到负载较轻的节点),避免热点节点过载。

7) 【常见坑/雷区】

  • 坑1:忽略网络抖动对低延迟的影响,未提补偿算法(如抖动补偿,根据历史延迟调整发送时间)。
  • 坑2:消息队列选型不当(如用RabbitMQ处理百万级消息,导致延迟过高或消息丢失)。
  • 坑3:容灾备份方案过于简单(如仅主从复制,未考虑多活数据中心的故障切换延迟,切换时间可能超过秒级)。
  • 坑4:低延迟与高并发的平衡,过度优化低延迟(如过多使用WebRTC P2P,导致服务器中转压力过大,反而影响稳定性)。
  • 坑5:缓存未考虑热点数据更新,导致缓存数据不一致(如用户状态变更后,缓存未及时更新,影响在线人数显示)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1