系统架构设计
分层架构
整体采用分层过滤与异步削峰的设计思路,流量从客户端到数据层依次经过限流、缓存、队列和数据库的处理:
客户端层 → 接入层 → 业务服务层 → 数据层
↓ ↓ ↓ ↓
CDN Nginx 无状态服务 主从库
倒计时 限流 消息队列 分库分表
具体组件
- 客户端:静态资源走 CDN 加速,前端做倒计时校准与防重复提交。
- 接入层:使用 Nginx+Lua 或 OpenResty 进行第一层限流和热点缓存。
- 业务层:秒杀服务集群保持无状态,配合 Kafka 或 RocketMQ 处理异步逻辑,Redis Cluster 支撑高并发缓存。
- 数据层:数据库采用主从读写分离,按商品或时间维度进行分库分表。
核心问题解决方案
1. 超卖问题
Redis 原子操作
利用 Lua 脚本保证库存扣减的原子性,避免并发竞争导致的数据不一致。
-- 使用 Redis 的 DECR 原子操作扣减库存
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 AND version = ?
预扣库存策略
先在 Redis 中预扣减,成功后再发送 MQ 消息异步同步到 DB。若失败则回滚。


