秒杀系统

官官方信息技术老师·7 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

秒杀系统

系统设计与场景题 · 第 2 章 高频场景题

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

秒杀系统

系统设计与场景题 · 第 2 章 高频场景题

1第 1 页 · 秒杀系统

流量漏斗削峰

百万流量只放千单成交:层层设闸——静态化、限流、队列,越靠近库越少。

前端闸
按钮置灰、答题验证、商品页 CDN 静态化
网关闸
令牌桶限流,黑名单拦截无效流量
队列闸
请求进 MQ 排队,后端按能力匀速消费
2第 2 页 · 流量漏斗削峰

库存预扣与防超卖

库存是必争之地:Redis 原子预扣,异步落库,防超卖靠原子性不靠检查。

Redis 预扣
decr 原子扣减,小于零即售罄回滚
异步落库
扣减成功进 MQ,异步更新数据库
对账兜底
Redis 与 DB 定时对账,修正漂移
3第 3 页 · 库存预扣与防超卖

热点 key 处理

一件商品打爆一个 key:本地缓存、key 拆片、限流保护,单点变多点。

本地缓存
应用内存缓存热点数据,免网络往返
分片离散
库存 key 拆 N 片分段扣减再汇总
限流保护
单 key 访问限流,防打穿缓存层
4第 4 页 · 热点 key 处理

风控与防刷

黄牛是第二战场:设备指纹、行为验证、名单体系,把机器人挡在门外。

设备指纹
设备特征聚合,识别模拟器与群控
行为验证
滑块、答题、速度异常拦截脚本
名单体系
黑名单直拒、灰名单加验、白名单放行
5第 5 页 · 风控与防刷

本节要点

  • ✓漏斗削峰:前端、网关、队列三道闸
  • ✓Redis 原子预扣,异步落库,对账兜底
  • ✓热点 key:本地缓存加分片离散
  • ✓风控:指纹、行为、名单三件套
延伸主题:画一遍秒杀链路算一次库存分片数
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1为什么「先查库存再扣减」在秒杀场景必挂?

参考答案查与扣之间是并发窗口:一千个请求同时查到「还有 1 件」然后都去扣。必须用原子操作(decr 或 Lua 脚本)把判断与扣减合并成一个不可分割的步骤。

2库存分片扣减会带来什么新问题?

参考答案分片后可能出现 A 片有货、B 片已空的不均衡,整体可售但部分请求被拒。解法:请求随机路由分片、失败重试其他片,或按水位动态合并分片。

3秒杀开始前为什么要把商品页静态化?

参考答案绝大多数流量是「看」不是「买」:静态化让刷新落在 CDN,根本不到应用服务器。漏斗的第一层,就是别让无效流量进门。

7第 7 页 · 课后思考