
1) 【一句话结论】
秒杀系统需通过“前端限流+中间件防刷+后端分布式锁+数据库优化+消息队列解耦”的分层架构,结合缓存预热、锁优化等手段,确保百万级并发下的性能与稳定性。
2) 【原理/概念讲解】
老师:“同学们,秒杀系统核心是解决‘高并发+低资源’的矛盾。首先得理解几个关键概念:
SETNX命令(原子性设置键值,若键不存在则设置成功),像抢购时只有拿到“唯一钥匙”的人能开柜子,防止超卖;id主键+id索引),提升读写性能;3) 【对比与适用场景】
| 策略 | 定义 | 特性 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 固定窗口 | 固定时间窗口(如1秒)计数 | 简单易实现 | 低并发场景 | 易超卖(窗口末尾大量请求) |
| 滑动窗口 | 动态调整窗口大小,实时统计 | 更精准 | 中高并发 | 实现复杂,需精确计算 |
| 令牌桶 | 持续生成令牌(速率R),按需消费 | 流量平滑 | 高并发 | 需要精确控制令牌生成速率 |
| 漏桶 | 持续流入水桶,按固定速率流出 | 限制最大速率 | 需要严格限制速率 | 易堆积 |
(注:限流策略中,令牌桶和滑动窗口更适合高并发场景,能更精准控制请求速率。)
4) 【示例】
秒杀请求流程(伪代码):
/kill/123);hset user:ip:123 last_time 1670000000),若当前时间-last_time<1秒,返回“防刷”;key=lock:123,value=当前时间戳);
key=stock:123),若库存>0:
Redis decr stock:123),若库存<=0,返回“库存不足”;select stock from goods where id=123 for update; stock=stock-1; update goods set stock=? where id=?);5) 【面试口播版答案】
各位面试官好,针对百万级用户并发访问的秒杀系统设计,我的核心思路是分层解耦+技术选型+性能优化+容错保障。首先,架构上分为前端限流、中间件防刷、后端分布式锁+数据库优化、消息队列解耦四层。前端用Nginx+Redis实现IP/用户限流,防止恶意请求;中间件用IP+用户+设备+时间窗口防刷,避免刷单;后端用Redis分布式锁保证同一商品同一时间只被一个用户抢购,数据库做读写分离+分库分表+索引优化,提升读写性能;消息队列(如Kafka)解耦库存扣减与通知服务,避免阻塞。性能优化上,缓存预热(秒杀前将热门商品库存预热到Redis),数据库加id索引,锁优化(设置锁超时避免死锁)。容错方面,熔断(如Hystrix)防止服务雪崩,降级(如库存不足时返回“库存不足”)保证可用性。这样整体能支撑百万级并发,同时保证系统稳定。
6) 【追问清单】
7) 【常见坑/雷区】