15 秒杀系统怎么设计

vvEcho 2026-03-18 11:16:09
Categories: Tags:

客户端–负载均衡 (LB)–限流/接入层–应用服务 (无状态)

├─> Redis库存原子减
│ │
│ ▼
│ 成功 → 写入 MQ
│ 失败 → 返回秒杀失败


消息队列 (削峰)


消费者服务

├─> 写数据库 (库存更新 + 订单)
└─> 发送通知 / 返回结果

秒杀需要考虑以下的问题
1.瞬时流量太高,需要必须要限流;然后用mq缓冲流量,避免DB的瞬时压力;预热缓存将热数据提前预热到redis中
2.库存一致性问题:redis使用lua表达式原子性扣减、MQ消费者顺序处理确保库存不被重复扣减、DB 乐观锁或事务保证库存更新原子性
3.接口需要幂等设计,避免重复下单
4.动态封禁,拦截恶意流量
5.做好降级预案,当瞬时流量超阈值提示稍后再试
6.监控好对应的QPS,库存,延迟和异常率