系统设计之短视频评论系统(抖音)

Posted by BX on Sat, May 17, 2025

高并发评论系统设计(短视频场景)

本设计面向大厂系统设计面试,聚焦于高并发、热点控制、缓存机制、数据一致性、异步削峰、点赞与审核风控等核心能力,强调工程可行性与面试答题表达能力。

1. 核心目标 & 约束条件

✅ 核心目标

  • 支持亿级视频 + 百亿评论 + 亿级用户
  • 秒级热评展示、点赞实时更新、强抗压写入
  • 低成本可扩展、可观测、可运营干预

⚙️ 非功能约束

指标项 指标描述
写入QPS 峰值 20万/s(评论+点赞)
读取QPS 峰值 50万/s(热评+翻页)
评论量 总量百亿,单视频百万级
用户量 活跃亿级
热点分布 高频热点视频强倾斜

2. 数据模型与层级控制(面试关注高)

🧱 评论表设计

字段名 类型 说明
comment_id BIGINT 主键,雪花 ID(全局唯一)
video_id BIGINT 视频 ID,分库分表路由键
parent_id BIGINT 父评论 ID(一级为 NULL)
user_id BIGINT 评论用户 ID
content TEXT 文本内容
like_count INT 点赞数(弱一致)
reply_count INT 回复计数(仅一级评论维护)
status TINYINT 状态:0=正常 1=删 2=审核中
create_time DATETIME 创建时间

🔍 核心索引设计

索引名 字段组合 用途说明
PRIMARY comment_id 主键
idx_video_ctime (video_id, create_time DESC) 视频评论时间倒序分页
idx_parent_id (parent_id) 子评论查询
idx_user_id (user_id) 用户维度管理/审计

🚫 嵌套层级控制(仅支持 2 层)

  • 业务写入层校验 parent_id:

    • 一级评论:parent_id = NULL
    • 二级回复:parent.parent_id = NULL,否则拒绝写入
    • 不依赖 DB 限制,仅靠逻辑校验

3. 写入架构(高并发 + 异步落库)

✍️ 评论写入

阶段 处理逻辑
生成 ID 接口层生成雪花 ID,写请求打入 MQ
落库 DB 消费端按 video_id 分表落库
构建缓存 评论内容以 JSON 结构写入 Redis
写穿透控制 Redis 设置空值占位防止频繁穿透

👍 点赞写入

机制项 技术手段
是否已点赞 Redis SISMEMBER 判断用户是否已点赞
点赞计数 INCR 计数缓存
热评排行 Redis ZADD video:{id}:hot_comments
幂等保障 使用 user_id+comment_id 做幂等 KEY
异步持久化 MQ 投递,定时批量刷盘至 DB(弱一致性)

4. 缓存策略(命中率 + 热点抗压)

🧊 写穿透控制

  • 新评论写入后立刻构建缓存(或异步写)
  • Redis 缓存失效时写空值占位,防止击穿

🔥 热评缓存方案

类型 方案说明
热评缓存结构 Redis SortedSet,分桶缓存:hot_comments:video_id:N
聚合查询 读取多个 ZSet 合并排序返回 TopN,结合本地热评列表缓存
多级缓存 Redis 主层 + LRU 本地短时热存 + CDN 页面级缓存(可选)

5. 分库分表策略(可扩展 + 热点规避)

📦 路由与分片

层级 分片策略
MySQL 表 video_id 哈希分 512/1024 张表
热点视频 可拆分为逻辑表 A/B/C,写时按 hash 再打散
Router 层 自研路由中间件 or ShardingSphere 自动路由

🔁 查询聚合策略

  • UNION ALL + LIMIT 聚合分页
  • Redis 热评拆 key 合并 ZUNIONSTORE 聚合

6. 消息队列与幂等机制

📬 异步链路说明

阶段 说明
生产端 评论/点赞操作写入 MQ,ACK 机制确保可靠写入
消费端 消费成功 ACK,否则重试 + 死信队列 DLQ
幂等处理 消息携带 log_id/comment_id 保证写入不重复
重试策略 支持幂等重试 + 最大失败次数 +告警落库

7. 评论排序逻辑(热度 / 时间)

🔢 排序类型说明

类型 排序字段 Redis 结构
最新排序 create_time DESC List 或 Hash
热度排序 score = 点赞+回复+时间衰减 SortedSet

8. 评论审核与风控接口(C端重点)

🛡️ 审核流程

环节 机制说明
内容审核 第三方接口检测文本违规(涉黄、暴恐、政治)
频次风控 接入风控平台,IP/UserAgent/行为特征识别机器人
灰度审核队列 可疑内容进入人工队列,标记 pending,人工/异步审核决定展示

9. 评论数一致性(最终一致)

项目 说明
实时计数 Redis INCR 维护
DB 真实计数 定期校对,使用日志反查、数据比对修正
写热点处理 分桶 INCR + Lua 脚本避免并发丢写

10. 总结面试高频关注点

模块 关键词
架构整体 缓存、异步、削峰、最终一致性、热点打散
点赞设计 Redis + 幂等 + 异步持久化 + ZSet 排行
缓存系统 写穿透防护、多级缓存、SortedSet 热评、边车预热
分库分表 video_id 分片、自研路由、热点视频多表、查询聚合优化
消息队列与幂等 Kafka / RocketMQ、log_id 幂等、死信队列、重试策略
评论审核 内容识别 API、风控接入点、灰度审核机制、状态字段隔离展示

🗣️ 附录:答题口播大纲(结构化表达模版)

面试时建议 3~5 分钟完整答题,围绕以下结构展开:

Step 1️⃣ 明确场景和挑战

  • 是短视频评论系统,写多读多,高并发
  • 目标支持亿级用户 + 热点视频百万级评论
  • 核心挑战是:写入高峰 + 点赞高频 + 热点倾斜 + 内容安全

Step 2️⃣ 描述核心模块设计(突出关键词)

  • 数据模型:parent_id 控制两层嵌套,视频维度分表,热点表逻辑拆分
  • 写入架构:Redis 抗压 + MQ 异步 + 雪花 ID + 幂等保障
  • 缓存策略:SortedSet 热评缓存,空值防穿透,边车预热 + 本地 LRU
  • 点赞机制:Set 判重,计数 + ZSet 排行,最终一致写入 DB
  • 审核风控:内容检测、频次识别、灰度队列,状态字段控制展示

Step 3️⃣ 扩展性与稳定性补充

  • 热点打散:评论写入表拆分 + Redis ZSet 分桶,查询合并
  • 分库路由:自研路由层 or 中间件 ShardingSphere
  • 数据一致性:评论数、点赞数定期对账 + Lua 分桶 INCR 防并发写丢

Step 4️⃣ 收尾总结 & 加分项

  • 系统整体保障了:高并发可用性、热点稳定性、内容安全合规
  • 可补充说:系统具备审计能力、运营干预接口、压测预案等实际工程要素