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

假设快手需要设计一个支持百万级并发请求的直播弹幕系统,作为产品经理,如何从策略角度定义需求、协调技术实现,并衡量成功指标?

快手策略产品经理 产品类难度:困难

答案

1) 【一句话结论】

百万级并发直播弹幕系统需通过“分层解耦(消息队列+缓存+数据库)+实时流处理”架构,结合动态扩展(如Kafka分区数自动调整)与缓存一致性策略(读时回源+并发控制),平衡低延迟、高可用与可扩展性,核心是削峰填谷与实时性保障。

2) 【原理/概念讲解】

老师口吻:高并发弹幕系统设计的关键是“解耦+削峰+加速”,各组件作用如下:

  • 消息队列(如Kafka):作为“异步消息中转站”,用户发送弹幕写入队列,消费端(实时推送服务)按分区消费。分区数根据并发量(如每个房间1-10个分区)和消费能力(每个分区1-5个消费者实例)动态调整,公式为:分区数 ≈ 并发量 / 消费能力(近似),确保吞吐量与延迟平衡。类比:快递中转站,分区数越多,中转效率越高。
  • 缓存(如Redis):采用“写时更新+读时回源”策略。用户写入后先更新Redis(列表结构,按时间倒序存储),再写入数据库。展示时优先从Redis读取(热点弹幕),减少数据库压力。读时回源时,通过数据库连接池限流(如每秒1000次请求)控制并发,避免数据库过载。
  • 数据库(如MySQL):读写分离,写库(主从复制)处理写入,读库(从库)支持读。消息队列消费端写入数据库时,采用批量插入(如每100条一批),减少锁竞争,提升写入性能。
  • 实时流处理:Kafka + Flink消费队列数据后,通过WebSocket推送到前端,保证弹幕实时性(延迟<200ms)。

3) 【对比与适用场景】

方案定义特性使用场景注意点
直接数据库写入用户直接写入数据库代码简单,无中间环节低并发(万级)高并发下数据库压力过大,延迟高,无法扩展
消息队列+数据库用户写入队列,消费端写入数据库解耦,削峰,支持水平扩展百万级并发需处理消息积压,确保顺序;Kafka ack=1保证消息不丢失
Redis缓存内存数据库,缓存热点弹幕延迟低(毫秒级),支持列表等结构热点弹幕展示需考虑缓存击穿(预热)、雪崩(短TTL+互斥锁)
消息队列+缓存+数据库三层架构综合性能,低延迟,高可用百万级+需复杂一致性策略,成本高,需动态扩展

4) 【示例】

伪代码(用户发送弹幕流程):

用户端:POST /danmu?roomId=101, userId=1001, content="太棒了!"
服务端:
1. 验证用户,生成消息:{ts: 1678888888, userId: 1001, content: "太棒了!", roomId: 101}
2. 写入Kafka,topic: danmu_room_101,分区键:roomId(分区数=5,每个分区1个消费者实例)
3. 写入Redis:key=room_101_danmu(列表,LPush序列化消息,过期5分钟)
4. 写入MySQL:INSERT INTO danmu (id, userId, content, roomId, time) VALUES (UUID(), 1001, "太棒了!", 101, NOW())
消费端(实时推送):
1. 从Kafka消费topic: danmu_room_101,分区0-4
2. 解析消息,写入Redis(RPush追加列表)
3. 通过WebSocket推送到前端
前端展示:
1. 从Redis获取room_101_danmu(LRANGE -100 0,倒序)
2. 渲染弹幕

5) 【面试口播版答案】

(约90秒)
“面试官您好,针对百万级并发直播弹幕系统,我的核心策略是通过分层解耦+实时流处理,结合消息队列分区、缓存一致性及动态扩展机制,确保低延迟和高可用。首先,需求定义上拆解为‘发送-展示-存储’三个环节,技术实现上采用Kafka解耦发送与展示,Redis加速热点弹幕读取,MySQL持久化存储。具体来说,用户发送弹幕后,先写入Kafka(分区按房间ID,每个分区1-5个消费者),再写入Redis(列表结构,倒序存储),最后写入数据库。消费端实时通过WebSocket推送,展示时优先从Redis读取。衡量成功指标包括:弹幕发送延迟(<100ms)、展示延迟(<200ms)、系统吞吐量(百万级QPS)、可用性(99.9%以上)。通过这些策略,系统能应对高并发,同时保证用户体验。”

6) 【追问清单】

  • 问:如何动态调整Kafka的分区数?
    答:通过监控Kafka的队列积压(如消息堆积时间)和消费延迟,当积压超过阈值(如10秒)时,自动增加分区数(如每个房间增加1-2个分区),并重新分配消费者实例,确保吞吐量与延迟平衡。
  • 问:缓存读时回源时如何控制并发?
    答:采用数据库连接池限流(如每秒1000次请求),并设置读缓存预热(如提前加载热门房间弹幕到缓存),减少回源压力。
  • 问:如何衡量系统延迟?
    答:通过分布式追踪(如OpenTelemetry)监控用户发送到展示的端到端延迟,设置告警阈值(如延迟超过200ms),及时调整资源。

7) 【常见坑/雷区】

  • 忽略Kafka分区数动态调整:若分区数固定,高并发时单个分区处理能力不足,导致延迟上升。
  • 缓存一致性策略错误:仅写数据库后更新缓存,未处理读时回源,导致展示旧数据。
  • 未考虑消息队列积压:未设置消费者数量或处理能力,导致消息堆积,影响实时性。
  • 缓存雪崩未处理:短TTL+互斥锁缺失,导致热点数据失效时,大量请求同时回源数据库,造成压力激增。
  • 未明确指标验证方法:如未监控延迟和吞吐量,无法证明系统满足百万级并发要求。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1