设计支持万人并发抢购的秒杀系统架构方案
一、系统架构设计
1. 分层架构
一个健壮的秒杀系统通常采用分层处理策略,从客户端到数据层逐级过滤流量:
客户端层 → 接入层 → 业务服务层 → 数据层
限流 缓存 队列 数据库
2. 具体组件
- 客户端:静态资源通过 CDN 分发,倒计时校准防止时间篡改,前端防重复提交。
- 接入层:使用 Nginx+Lua 或 OpenResty 进行第一道限流和静态缓存。
- 业务层:
- 无状态秒杀服务集群,便于弹性伸缩。
- 消息队列(Kafka/RocketMQ)用于削峰填谷。
- Redis Cluster 缓存集群处理热点库存。
- 数据层:
- 主从数据库实现读写分离。
- 分库分表策略按商品 ID 或时间片拆分。
二、核心问题解决方案
1. 超卖问题
方案一:Redis 原子操作
利用 Lua 脚本保证检查与扣减的原子性,避免多线程竞争。
local stock = tonumber(redis.call('GET', KEYS[1]))
if stock and stock > 0 then
redis.call('DECR', KEYS[1])
return 1
end
return 0
方案二:数据库乐观锁
在 SQL 层面增加版本号控制,确保并发更新时的数据一致性。
UPDATE products SET stock = stock - 1, version = version + 1
WHERE id = ? AND stock > 0 AND version = ?


