系统架构设计
1. 分层架构
整体采用分层过滤策略,流量从客户端到数据层逐级衰减:
客户端层 → 接入层 → 业务服务层 → 数据层
限流 缓存 队列 数据库
2. 具体组件
- 客户端:静态资源走 CDN,倒计时校准,前端防重复提交。
- 接入层:Nginx+Lua/OpenResty,承担第一道限流和热点缓存。
- 业务层:
- 秒杀服务集群(无状态设计)
- 消息队列(Kafka/RocketMQ)用于削峰
- Redis Cluster 缓存集群
- 数据层:
- 主从数据库(读写分离)
- 分库分表(按商品或时间维度)
核心问题解决方案
1. 超卖问题
方案一: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
在 Java 中调用时,直接执行该脚本并判断返回值。
方案二:数据库乐观锁
作为兜底方案,防止极端情况下的数据不一致。
UPDATE products
SET stock = stock - 1, version = version + 1
WHERE id = ? AND stock > 0 AND version = ?


