高并发弹幕

弹幕系统的高并发难点不只是“很多人发消息”,更是广播放大。一条弹幕如果要推给 10 万在线观众,就会变成 10 万次下行推送。

1 条入站消息 -> N 个在线观众出站消息

这就是直播弹幕的核心压力。

广播放大

假设一个房间 10 万人在线,每秒 1000 条弹幕。如果每条都推给所有人,理论下行消息就是:

1000 × 100000 = 1 亿条/秒

这显然不可接受。系统必须对大房间做策略控制。

房间分片

热门房间可以把观众连接分散到多个网关分片:

room_123_shard_1
room_123_shard_2
room_123_shard_3

消息服务把房间消息发布到所有分片,每个网关只负责本机连接。这样可以横向扩展下行能力。

消息降采样

不是每个观众都必须看到每一条普通弹幕。对大房间可以采用:

  • 普通弹幕采样展示。
  • 高频用户限速。
  • 重复内容合并。
  • 只保留高质量或高权重消息。
  • 礼物、管理员、系统消息优先推送。

这不是偷工减料,而是直播产品的体验取舍:用户需要的是热闹和实时,不是逐字逐条完整接收。

热点隔离

热门房间不能拖垮全站。要做隔离:

  • 大房间使用独立频道和资源池。
  • 单房间设置最大入站消息率。
  • 单用户、单设备、单 IP 限流。
  • 网关发送队列过长时丢弃低优先级弹幕。
  • 礼物和系统消息走高优先级通道。

隔离的目标是让一个爆火直播间不会影响其他房间。

在线人数

在线人数也不能每个连接变化都实时写数据库。可以由网关定期上报本机房间连接数,再由聚合服务计算近似在线人数。对用户展示的在线人数可以允许短时间误差。

高并发弹幕的关键是承认消息有优先级,并通过分片、采样、限流和隔离保护核心体验。下一章引入消息队列,把发送、审核、分发、落库解耦。