信息技术大学
秒杀系统
系统设计与场景题 · 第 2 章 高频场景题
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
秒杀系统
系统设计与场景题 · 第 2 章 高频场景题
流量漏斗削峰
百万流量只放千单成交:层层设闸——静态化、限流、队列,越靠近库越少。
前端闸
按钮置灰、答题验证、商品页 CDN 静态化
网关闸
令牌桶限流,黑名单拦截无效流量
队列闸
请求进 MQ 排队,后端按能力匀速消费
库存预扣与防超卖
库存是必争之地:Redis 原子预扣,异步落库,防超卖靠原子性不靠检查。
Redis 预扣
decr 原子扣减,小于零即售罄回滚
异步落库
扣减成功进 MQ,异步更新数据库
对账兜底
Redis 与 DB 定时对账,修正漂移
热点 key 处理
一件商品打爆一个 key:本地缓存、key 拆片、限流保护,单点变多点。
本地缓存
应用内存缓存热点数据,免网络往返
分片离散
库存 key 拆 N 片分段扣减再汇总
限流保护
单 key 访问限流,防打穿缓存层
风控与防刷
黄牛是第二战场:设备指纹、行为验证、名单体系,把机器人挡在门外。
设备指纹
设备特征聚合,识别模拟器与群控
行为验证
滑块、答题、速度异常拦截脚本
名单体系
黑名单直拒、灰名单加验、白名单放行
本节要点
- ✓漏斗削峰:前端、网关、队列三道闸
- ✓Redis 原子预扣,异步落库,对账兜底
- ✓热点 key:本地缓存加分片离散
- ✓风控:指纹、行为、名单三件套
延伸主题:画一遍秒杀链路算一次库存分片数
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1为什么「先查库存再扣减」在秒杀场景必挂?
参考答案查与扣之间是并发窗口:一千个请求同时查到「还有 1 件」然后都去扣。必须用原子操作(decr 或 Lua 脚本)把判断与扣减合并成一个不可分割的步骤。
2库存分片扣减会带来什么新问题?
参考答案分片后可能出现 A 片有货、B 片已空的不均衡,整体可售但部分请求被拒。解法:请求随机路由分片、失败重试其他片,或按水位动态合并分片。
3秒杀开始前为什么要把商品页静态化?
参考答案绝大多数流量是「看」不是「买」:静态化让刷新落在 CDN,根本不到应用服务器。漏斗的第一层,就是别让无效流量进门。