直播弹幕实时审核系统设计

设计一个日活千万、10W+ QPS、200ms 内完成弹幕违规检测的实时审核系统。核心思想:多级管道 + 分级降级 + 异步深审

需求分析

核心指标

指标要求说明
QPS10W+弹幕发送峰值
延迟< 200ms审核完成后弹幕才展示
违规检测违规词 + AI 语义敏感词匹配 + 语义理解
机器刷屏自动识别频率/内容相似度/行为分析

整体架构

发送方 → 接入层 → 消息队列(缓冲) → 审核管道 → 结果分发 → 展示/屏蔽
                              ↓
                         降级/熔断

分层设计(审核管道)

L0 — 前置过滤层(< 1ms)

目标:拦截最明显的重复/无效请求,降低下游压力

布隆过滤器 → 同内容去重 → 同IP频率计数
  • 本地布隆过滤器(Guava BloomFilter):相同弹幕 1s 内不重复审核
  • IP/用户频率计数器:本地缓存 + Redis 分布式计数
  • 白名单放行:主播、管理员等免审用户直接通过

L1 — 规则引擎层(< 5ms)

目标:精确匹配敏感词,拦截 90%+ 违规内容

AC 自动机匹配 → 正则表达式 → 黑白名单
  • AC 自动机(Aho-Corasick):多模式串匹配,时间复杂度 O(n),支持百万级敏感词库
  • 正则表达式层:匹配变体、拆字、拼音等规避手法
  • 黑白名单:动态更新,分布式配置下发
  • 作用:拦截大部分脏话、广告、政治敏感词

L2 — 轻量模型层(< 50ms)

目标:语义层面的违规检测

  • 部署蒸馏后的 BERT 小模型(如 TinyBERT / DistilBERT / ALBERT)
  • 量化 + ONNX Runtime 推理
  • GPU/CPU 混合部署,利用 TensorRT 加速
  • 检测类型:色情文本、暴力倾向、广告引流、辱骂等

L3 — 大模型层(异步,> 200ms)

目标:复杂语义理解、上下文分析

L2 标记为"疑似违规" → 异步 MQ → L3 大模型审核
                                    ↓
                         结果回调 → 补充惩罚/解封
  • 消息队列 异步处理(RocketMQ / Kafka)
  • 调用 LLM(如 GPT-4 类 API 或自建模型)进行深度语义分析
  • 复杂场景:反讽、隐喻、梗图识别等
  • 结果延迟回调,用于修正/追加处罚

L4 — 人工审核层

  • L3 判定为”高风险”或有争议的内容进入人工审核工单
  • 人工审核员在管理后台处理
  • 用于模型训练数据的回流

降级策略

                正常状态
                    ↓
L3 超时/不可用 → 降级为 L2 结果(不安全但可用)
                    ↓
L2 模型不可用 → 降级为 L1 规则引擎(仅敏感词)
                    ↓
L1 规则引擎过载 → 降级为 L0 + 放行(允许少量漏过)
                    ↓
系统整体过载 → 限流(丢弃部分弹幕请求)
降级级别触发条件影响恢复机制
L3 降级大模型超时/API 不可用语义审核降级为规则审核自动重试+健康检查
L2 降级模型推理失败/高延迟模型语义检测降级为规则自动切换备用模型
L1 降级规则引擎 CPU 满载仅保留基础过滤弹性扩缩容
熔断整体延迟 > 500ms放行所有弹幕(记录日志)半开探测恢复

机器刷屏识别

多维度检测

维度指标检测方法
时间维度同一用户/IP 在单位时间内的弹幕频率滑动窗口计数
内容维度弹幕内容相似度编辑距离 / SimHash
行为维度多账号在相同毫秒级时间点发送相同内容时间序列聚类
设备维度同一设备指纹关联多个账号设备指纹 + 关联分析

处理策略

  • 轻量拦截:检测到刷屏 → 对该用户/设备临时限速
  • 内容拦截:完全相同的弹幕短时间内限制发送次数
  • 处罚:高频刷屏 → 禁言 / 封禁

缓存策略

数据缓存位置策略
敏感词库本地内存(更新时 Redis 推送)写时更新,定期全量刷新
用户频率计数本地 + Redis滑动窗口算法
模型结果缓存Redis相同内容缓存 30s
白名单本地内存长缓存,变更推送

参考链接