高并发评论系统设计(短视频场景)
本设计面向大厂系统设计面试,聚焦于高并发、热点控制、缓存机制、数据一致性、异步削峰、点赞与审核风控等核心能力,强调工程可行性与面试答题表达能力。
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️⃣ 收尾总结 & 加分项
- 系统整体保障了:高并发可用性、热点稳定性、内容安全合规
- 可补充说:系统具备审计能力、运营干预接口、压测预案等实际工程要素