这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
完整架构
完整的直播弹幕系统可以拆成四层:
连接层 -> 消息处理层 -> 分发层 -> 异步治理与统计层
连接层维护 WebSocket,消息处理层做鉴权、限流、审核和分级,分发层按房间和网关广播,异步层负责落库、统计、风控、回放和榜单。
分层架构
┌─────────────────────────────────────────────────────────────────┐
│ 连接层 │
│ 客户端(浏览器/App) <-> WebSocket 网关(连接/心跳/鉴权/限流) │
└──────────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ 消息处理层 │
│ message_id 生成 · 敏感词过滤 · 禁言检查 · 消息分级 · 房间校验 │
└──────────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ 分发层 │
│ 房间分发服务 -> 各网关分片(本地 fan-out 推送给本机连接) │
└──────────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ 异步治理与统计层 │
│ 消息落库/回放 · 在线人数聚合 · 内容审核 · 礼物账务 · 榜单统计 │
└─────────────────────────────────────────────────────────────────┘
一次普通弹幕发送流程
- 客户端通过 WebSocket 连接到网关。
- 用户发送弹幕,网关做基础限流和鉴权。
- 消息服务生成
message_id,执行敏感词和禁言检查。 - 普通弹幕进入实时分发通道。
- 房间分发服务把消息发布到各网关分片。
- 网关推送给本机连接的观众。
- 异步消费者处理落库、统计和审核复盘。
礼物和管理消息走更高优先级通道,并带有更严格的幂等和审计。
消息分级策略
| 消息 | 优先级 | 可靠性 |
|---|---|---|
| 普通弹幕 | 中 | 低延迟优先,允许采样 |
| 系统公告 | 高 | 必须送达或重试 |
| 礼物消息 | 高 | 以支付结果为准,幂等展示 |
| 管理消息 | 最高 | 强审计、快速生效 |
| 点赞事件 | 低 | 聚合统计,不逐条广播 |
这张表是直播弹幕系统的核心设计依据。没有分级,系统会在高峰时无法取舍。
广播与隔离
- 广播放大:大房间采样展示普通弹幕,不逐条推给所有人。
- 房间分片:热门房间把观众连接分散到多个网关分片,横向扩展下行能力。
- 热点隔离:大房间独立频道和资源池,单房间限入站消息率,避免拖垮全站。
队列拆分
| 队列 | 用途 |
|---|---|
| realtime_dispatch | 房间实时分发 |
| content_audit | 内容审核和风控 |
| message_persist | 消息落库和回放 |
| stats_event | 在线人数、弹幕数、互动统计 |
| gift_event | 礼物展示和账务后处理 |
不同任务进不同队列,礼物和管理员消息有更高优先级,不被普通弹幕积压影响。
关键指标
- 端到端延迟、连接数(单网关/单房间/全站)、广播吞吐、丢消息率、治理命中率。
- 心跳超时率、单网关发送队列长度、推送失败率。
- 礼物订单与主播收益、榜单贡献值定期对账。
这套架构的关键在于:网关轻量、消息分级、分发分片、异步解耦,实时链路和治理链路各司其职。
