完整架构

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

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

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

分层架构

┌─────────────────────────────────────────────────────────────────┐
│                       连接层                                    │
│  客户端(浏览器/App) <-> WebSocket 网关(连接/心跳/鉴权/限流)   │
└──────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                      消息处理层                                 │
│  message_id 生成 · 敏感词过滤 · 禁言检查 · 消息分级 · 房间校验    │
└──────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                       分发层                                    │
│  房间分发服务 -> 各网关分片(本地 fan-out 推送给本机连接)        │
└──────────────────────────────┬───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                   异步治理与统计层                               │
│  消息落库/回放 · 在线人数聚合 · 内容审核 · 礼物账务 · 榜单统计     │
└─────────────────────────────────────────────────────────────────┘

一次普通弹幕发送流程

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

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

消息分级策略

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

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

广播与隔离

  • 广播放大:大房间采样展示普通弹幕,不逐条推给所有人。
  • 房间分片:热门房间把观众连接分散到多个网关分片,横向扩展下行能力。
  • 热点隔离:大房间独立频道和资源池,单房间限入站消息率,避免拖垮全站。

队列拆分

队列用途
realtime_dispatch房间实时分发
content_audit内容审核和风控
message_persist消息落库和回放
stats_event在线人数、弹幕数、互动统计
gift_event礼物展示和账务后处理

不同任务进不同队列,礼物和管理员消息有更高优先级,不被普通弹幕积压影响。

关键指标

  • 端到端延迟、连接数(单网关/单房间/全站)、广播吞吐、丢消息率、治理命中率。
  • 心跳超时率、单网关发送队列长度、推送失败率。
  • 礼物订单与主播收益、榜单贡献值定期对账。

这套架构的关键在于:网关轻量、消息分级、分发分片、异步解耦,实时链路和治理链路各司其职。