高并发秒杀系统设计
一、系统架构设计
1. 分层架构
典型的秒杀系统采用分层处理模式,流量从客户端到数据层依次经过限流、缓存、队列和数据库。
客户端层 → 接入层 → 业务服务层 → 数据层
↓ ↓ ↓ ↓
CDN/静态资源 Nginx/Lua 无状态集群 主从库 + 分库分表
限流缓存 消息队列 Redis Cluster
2. 核心组件
- 客户端:静态资源走 CDN,倒计时校准,防重复提交。
- 接入层:Nginx+Lua/OpenResty,第一道防线,负责基础限流和缓存。
- 业务层:秒杀服务集群(无状态),配合 Kafka/RocketMQ 削峰,Redis Cluster 管理库存。
- 数据层:主从数据库读写分离,按商品或时间维度分库分表。
二、核心问题解决方案
1. 超卖问题
超卖是秒杀系统的头号大敌,必须通过原子性操作彻底杜绝。
Redis 原子操作
利用 Lua 脚本保证检查与扣减的原子性。这是最推荐的方式,因为 Redis 单线程执行 Lua 脚本,天然避免了竞态条件。
-- 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
数据库乐观锁
作为兜底方案,在数据库层面使用版本号控制。
UPDATE products
SET stock = stock - 1, version = version + 1
WHERE id = ? AND stock > 0 version ?;


