直播弹幕实时审核系统设计
设计一个日活千万、10W+ QPS、200ms 内完成弹幕违规检测的实时审核系统。核心思想:多级管道 + 分级降级 + 异步深审。
需求分析
核心指标
| 指标 | 要求 | 说明 |
|---|---|---|
| QPS | 10W+ | 弹幕发送峰值 |
| 延迟 | < 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 |
| 白名单 | 本地内存 | 长缓存,变更推送 |
参考链接
- 快手电商-一面-19题总结 — Q19 直播弹幕审核系统
- 接口幂等方案设计 — 防止重复提交
- 分布式锁实现 — 分布式频率计数
- 接口性能排查指南 — 性能排查方法论