一、系统架构设计
1. 分层架构
典型的秒杀架构通常采用分层处理,流量逐层过滤:
客户端层 → 接入层 → 业务服务层 → 数据层
↓ ↓ ↓ ↓
CDN/静态资源 限流/缓存 队列削峰 数据库
2. 具体组件
- 客户端:静态资源走 CDN,倒计时校准,防重复提交。
- 接入层:Nginx + Lua 或 OpenResty,做第一层限流和缓存。
- 业务层:秒杀服务集群(无状态)、消息队列(Kafka/RocketMQ)、缓存集群(Redis Cluster)。
- 数据层:主从数据库(读写分离),必要时分库分表(按商品或时间)。
二、核心问题解决方案
1. 超卖问题
方案一:Redis 原子操作
利用 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 = ? stock version ?;


