
1) 【一句话结论】
秒杀系统核心是高并发资源抢占与数据一致性保障,需通过限流层、分布式锁、缓存+数据库双写、消息队列等组件,结合分层架构与异步解耦,实现百万级请求的秒杀体验。
2) 【原理/概念讲解】
老师口吻解释核心概念:
“秒杀系统设计需围绕‘高并发资源抢占’与‘数据一致性’展开。系统架构通常分层:接入层(Nginx+限流)防流量冲击;业务逻辑层(处理请求、校验、调用锁)是核心;存储层(缓存+数据库)保障数据持久性;监控层(指标监控)辅助优化。数据一致性方面,秒杀场景对实时性要求高,采用最终一致性(允许短暂不一致),通过分布式锁(如Redis SETNX)保证同一商品同一时间仅一人抢购,避免超卖。高并发优化上,缓存预热(提前加载热门商品库存到Redis)、数据库分库分表(按商品ID分库,减少单库压力)、读写分离(缓存读,数据库写)、消息队列(异步处理订单,解耦业务)是关键。”
3) 【对比与适用场景】
| 对比项 | 限流算法(滑动窗口 vs 令牌桶) | 分布式锁(Redis SETNX vs Zookeeper) |
|---|---|---|
| 滑动窗口 | 定义:动态调整窗口大小,计数防超限;特性:更精准,适合高频请求;使用场景:秒杀等高频场景;注意点:实现复杂,需防超限瞬间流量。 | 定义:Redis SETNX原子操作,分布式锁;特性:简单易用,适合秒杀场景;使用场景:单机/分布式资源抢占;注意点:不可重入,超时需处理。 |
| 令牌桶 | 定义:持续生成令牌,请求消耗;特性:流量平滑,防峰值;使用场景:需要流量平滑的场景;注意点:令牌生成速率固定。 | 定义:Zookeeper事务性,可重入;特性:强事务性,适合强一致性需求;使用场景:需要强事务的场景;注意点:依赖ZK集群,部署复杂。 |
4) 【示例】
秒杀请求流程(伪代码):
用户请求秒杀商品ID=1001:
5) 【面试口播版答案】
“面试官您好,秒杀系统设计核心是应对百万级并发下的资源抢占与数据一致性,我总结几个关键点:首先系统架构分层,接入层用Nginx+滑动窗口限流防流量冲击;业务层用Redis分布式锁保证同一商品同一时间仅一人抢购,避免超卖;存储层采用缓存+数据库双写,缓存预热热门商品库存,数据库按商品ID分库分表分散压力;高并发下还用消息队列异步处理订单,解耦业务。数据一致性方面,秒杀场景允许最终一致性,通过分布式锁保证抢购时的互斥,同时缓存与数据库双写保证一致性。性能优化上,除了限流、缓存,还有数据库读写分离、分库分表、消息队列异步处理等。这样整体能支撑百万级请求的秒杀。”
6) 【追问清单】
7) 【常见坑/雷区】