
1) 【一句话结论】
采用“WebSocket+消息队列+CDN+分布式数据库(分库分表+Redis缓存)”的分布式架构,通过异步解耦、就近加速、数据水平拆分,支撑千万级用户毫秒级弹幕交互,并考虑用户离线消息重发等边界场景。
2) 【原理/概念讲解】
老师口吻解释各组件:
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Kafka | 分布式发布-订阅消息系统 | 高吞吐、持久化、多消费者、顺序保证 | 实时数据流、千万级消息推送、日志 | 需持久化存储,启动慢,适合大规模 |
| RabbitMQ | 企业级消息代理 | 队列、交换机、路由、延迟低 | 中间件解耦、小规模消息、顺序保证 | 延迟低,但吞吐不如Kafka,适合中小规模 |
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| MySQL | 关系型数据库,支持事务 | 结构化存储、事务一致性、持久化 | 弹幕内容、用户关联数据(如用户ID、直播间ID) | 分库分表复杂,读写分离需额外设计 |
| Redis | Key-Value内存缓存 | 毫秒级读写、缓存热点数据 | 弹幕实时缓存(如top10热点弹幕)、热点数据读取 | 内存有限,需持久化(RDB/AOF),适合高频读取 |
4) 【示例】
客户端发送弹幕(通过WebSocket):
// 客户端请求示例
POST /api/barrage
{
"userId": "user_001",
"roomId": "live_001",
"content": "直播太精彩了!",
"timestamp": 1672531200
}
服务端处理流程:
barrage_topic),消息包含用户ID、直播间ID、内容等。barrage:hot:top10缓存热点弹幕,barrage:live_001存储该直播间弹幕列表)。barrage_live_001表),存储完整弹幕记录(用户ID、内容、时间等)。5) 【面试口播版答案】
面试官您好,针对千万级用户低延迟弹幕系统,核心是构建分布式实时通信架构。首先,客户端通过WebSocket与服务器建立长连接,实现毫秒级消息推送。服务端将弹幕消息异步写入消息队列(如Kafka),利用其高吞吐特性解耦消息处理,避免单点阻塞。消息队列消费者负责将消息分发给多个前端节点,结合CDN缓存弹幕内容,减少网络延迟。同时,数据库采用分库分表(如MySQL按直播间ID分表,Redis缓存热点数据),存储弹幕数据,确保读写性能。通过这种架构,既能支撑高并发,又能保证低延迟,实现千万级用户毫秒级交互,并考虑用户离线时消息重发等边界场景。
6) 【追问清单】
7) 【常见坑/雷区】