秒杀系统 → 限流 → 库存扣减 → 分布式锁 追问链#
追问路径#
Q: 秒杀系统怎么设计?核心挑战是什么?
→ 核心挑战是瞬时高并发+防超卖;前端限流(按钮置灰/验证码) + 后端削峰(MQ缓冲) + 异步下单
Q: 怎么防止超卖?
→ Redis预扣库存:Lua脚本原子执行 decr + 判断≥0,通过后发MQ异步创建订单扣减DB库存
Q: Redis扣完库存怎么和数据库同步?
→ MQ异步落库(最终一致),消费失败重试+死信队列兜底;DB层再用乐观锁(version字段)防万一
├─ Q: 库存扣减方案有哪些?各有什么优缺点?
│ → 悲观锁(for update, 性能差)/乐观锁(CAS version, 适合低竞争)/Redis预扣(高性能但需同步DB)/分段库存(分散竞争)
│ Q: 分段库存怎么做?
│ → 将总库存1000拆成10段每段100,请求随机路由到不同段;减少单key竞争
│ Q: 分段后库存碎片和汇总怎么处理?
│ → 某段扣完时从其他段借调合并;定时任务扫描低库存段回收碎片
│ Q: 订单超时未支付怎么取消?
│ → RocketMQ延迟消息(精确到秒)/时间轮(内存实现)/定时扫表(兜底但延迟高)
└─ Q: 限流怎么做?
→ 网关层:令牌桶(允许突发,如Guava RateLimiter) / 应用层:Sentinel(滑动窗口+降级)
Q: 热点数据怎么处理?
→ 本地缓存(Caffeine, TTL短如1s) + JVM内预热 + 多级缓存(本地→Redis→DB)
Q: 前端怎么优化?
→ 页面静态化+CDN加速+动静分离;按钮防重复点击+答题验证码拉平流量plaintext涉及知识点#
- 秒杀系统设计 — 秒杀架构全景
- 库存扣减方案 — 4种库存扣减方案对比
- 限流方案设计 — 网关层与应用层限流
- 限流算法 — 固定窗口/滑动窗口/漏桶/令牌桶
- Redis分布式锁 — 互斥访问共享资源
- Redis事务与Lua脚本 — 原子操作保证
- 消息积压处理方案 — MQ削峰的容量规划
- 订单超时取消方案 — 延迟消息/时间轮/扫表
- 热Key问题与解决 — 热点key检测与本地缓存
- 缓存穿透-击穿-雪崩 — 秒杀场景下的缓存防护
- Sentinel限流原理 — 应用层限流框架
核心串联逻辑#
- 流量漏斗:前端拦截90%(按钮/验证码) → 网关限流(令牌桶) → 应用层限流(Sentinel) → Redis预扣库存 → MQ异步下单
- 库存方案选型:万级QPS用Redis预扣(单key 10万+ QPS);超高竞争用分段库存(N段×10万=N*10万)
- 异步下单:Redis预扣成功后发MQ,消费者创建订单+扣DB库存(乐观锁),失败重试+DLQ
- 超时取消:RocketMQ延迟消息最简单(18个延迟级别),30分钟未支付自动取消+回补Redis库存
- 热点防护:秒杀商品是典型热key,用本地缓存(Caffeine 1s TTL) + Redis从库读取分摊压力
- 代码示例:
lua-- Redis Lua原子扣减库存 local stock = tonumber(redis.call('get', KEYS[1])) if stock > 0 then redis.call('decr', KEYS[1]) return 1 -- 扣减成功 end return 0 -- 库存不足
面试回答串联#
30秒速答#
“秒杀系统前端限流+后端削峰+异步下单。防超卖用Redis Lua原子预扣库存,成功后MQ异步落库。高竞争用分段库存分散压力。限流网关层令牌桶+应用层Sentinel,热点数据用本地缓存Caffeine。“
2分钟展开答#
“秒杀系统的核心是瞬时高并发下防超卖。架构上做流量漏斗:前端按钮置灰+验证码拦截90%请求,网关层令牌桶限流,应用层Sentinel做兜底。库存扣减用Redis Lua脚本原子执行decr+判断≥0,单key可以达到10万+ QPS。如果更高并发可以用分段库存——把1000库存拆成10段每段100,请求随机路由到不同段分散竞争。Redis预扣成功后发MQ异步创建订单,消费者用乐观锁(version字段)扣减DB库存防万一超卖。消费失败重试+死信队列兜底。订单30分钟未支付用RocketMQ延迟消息自动取消并回补Redis库存。热点商品是典型热key问题,用Caffeine本地缓存设1s短TTL,加上Redis从库读取分摊压力。前端做页面静态化+CDN加速+动静分离,减少后端请求量。“
相关追问链#
- Redis缓存问题-一致性-分布式锁追问链 — 秒杀中的Redis缓存与分布式锁
- MQ可靠性-顺序-积压-事务消息追问链 — MQ在秒杀削峰中的可靠性保障
- 微服务注册-熔断-限流-链路追问链 — Sentinel限流的详细原理
- 分布式锁-事务-一致性方案追问链 — 库存扣减的分布式一致性保证