秒杀系统如何设计?
高并发面试题发布于
一、挑战
高并发、库存有限、防超卖、防刷。
二、优化手段
1. 前端
- 按钮置灰,防止重复提交。
- 答题/验证码防机器人。
2. 网关层
- 限流(用户维度、IP 维度)。
- 静态资源 CDN。
3. 应用层
- Redis 预减库存,判断是否还有库存。
- 异步下单:请求写 MQ,消费者处理订单。
- 本地缓存挡热点商品。
4. 数据层
- Redis 存库存,扣减用 Lua 保证原子。
- 数据库乐观锁防超卖:update stock set count=count-1 where id=? and count>0。
- 订单表唯一索引(user_id + goods_id)防重复下单。
三、流程
- 用户请求秒杀 → 网关限流。
- Redis 检查库存(Lua 原子操作)。
- 有库存 → 扣减 + 发 MQ。
- 消费者创建订单 + 数据库扣库存。
- 返回排队中,客户端轮询结果。
四、关键
- 库存用 Redis 挡大部分流量。
- MQ 削峰,数据库只处理真实订单。
- 幂等:用户+商品唯一。