完整系统

系统演进路线

从轮询聊天室到生产级直播互动平台

第 1 版

单房间轮询

几十个观众时先让页面每 2 秒拉一次消息。

  • HTTP API
  • MySQL 弹幕表
  • 客户端轮询

延迟高,热门房间会把数据库扫穿。

第 2 版

WebSocket 长连接

观众开始抱怨“弹幕慢半拍”,需要把消息主动推到客户端。

  • 连接网关
  • 心跳保活
  • 鉴权
  • 断线重连

网关既管连接又管业务,单机连接数和发送队列成为瓶颈。

第 3 版

房间分片广播

万人直播间一条弹幕要发给几万连接,不能让单网关承担全量广播。

  • 房间路由
  • 网关分片
  • 本机连接表
  • 热点房间隔离

普通弹幕、礼物、管理消息混在一起,高峰时无法取舍。

生产版

分级消息平台

礼物、禁言、抽奖和风控都进入直播间,弹幕系统变成实时互动平台。

  • 消息队列
  • 优先级通道
  • 审核风控
  • 礼物幂等
  • 监控告警

必须用分级、降级和审计保证体验与账务安全。

完整的直播弹幕系统可以拆成四层:

连接层 -> 消息处理层 -> 分发层 -> 异步治理与统计层

连接层维护 WebSocket,消息处理层做鉴权、限流、审核和分级,分发层按房间和网关广播,异步层负责落库、统计、风控、回放和榜单。

最终架构

一次普通弹幕发送流程:

  1. 客户端通过 WebSocket 连接到网关。
  2. 用户发送弹幕,网关做基础限流和鉴权。
  3. 消息服务生成 message_id,执行敏感词和禁言检查。
  4. 普通弹幕进入实时分发通道。
  5. 房间分发服务把消息发布到各网关分片。
  6. 网关推送给本机连接的观众。
  7. 异步消费者处理落库、统计和审核复盘。

礼物和管理消息会走更高优先级通道,并带有更严格的幂等和审计。

消息分级策略

消息优先级可靠性
普通弹幕低延迟优先,允许采样
系统公告必须送达或重试
礼物消息以支付结果为准,幂等展示
管理消息最高强审计、快速生效
点赞事件聚合统计,不逐条广播

这张表是直播弹幕系统的核心设计依据。没有分级,系统会在高峰时无法取舍。

关键决策

  1. WebSocket 还是轮询:实时性要求决定使用 WebSocket,轮询只适合低频场景。
  2. 每条弹幕都广播吗:大房间不能。需要采样、限流和优先级。
  3. 网关是否处理业务逻辑:网关应轻量,复杂逻辑放到消息服务和异步消费者。
  4. 礼物是否和弹幕同链路:展示可以共用分发能力,资金链路必须独立可靠。
  5. 在线人数是否强准确:展示可以近似,结算和统计要有后端校验。

上线检查清单

  • WebSocket 是否有鉴权、心跳、重连和连接清理?
  • 单网关连接数、发送队列和推送失败率是否有监控?
  • 大房间是否有分片、限流和热点隔离?
  • 普通弹幕、礼物、管理消息是否分通道或分优先级?
  • 消息队列积压时是否有降级策略?
  • 礼物事件是否以支付订单为准并保证幂等?
  • 敏感词、禁言、黑名单是否在实时链路生效?
  • 弹幕落库、回放、统计是否异步解耦?

课程总结

直播弹幕系统的本质是实时消息分发平台。它既要低延迟,又要能承受热点;既要让房间热闹,又要能治理内容;既要展示礼物动效,又不能破坏账务一致性。

设计这类系统时,始终先问:

  • 哪些消息必须可靠,哪些可以采样?
  • 哪些链路要求毫秒级,哪些可以异步?
  • 热门房间是否会拖垮全站?
  • 付费和管理消息是否有独立保障?

回答清楚这些问题,直播弹幕系统才具备生产级架构基础。