简单题,如果你的工作经历或者你面试的岗位跟电商有关,那么就有可能问到。各种级别都有可能问到,不过级别比较低的话回答就不需要那么准确完善。
早期电商火热的时候,就可以说是必考题了,但是现在比较少考察了。
如何设计一个秒杀这个问题,最重要的是解释清楚秒杀的经典架构,并且在回答中留下足够的引导点。
首先来看秒杀的经典架构:
完整内容需要VIP会员权限
Redis预扣库存,Kafka削峰,消费者锁库存建订单
设计一个秒杀的架构分成四个关键部分。
第一个是引入 Redis 预扣库存。也就是所有的秒杀请求第一步就是在 Redis 中预扣库存。
第二个是借助 MQ 来削峰解耦。即如果预扣库存成功了,那么这个请求就会被转发到 MQ 上,主要是起到一个削峰的作用。
Redis预扣库存,MQ削峰解耦,消费者下订单锁库存
超卖
除了这些问题,秒杀架构还要进一步考虑解决这些问题。
第一个问题是幂等性的问题,即处理重复的秒杀请求。
第二个问题是同一个秒杀活动,限制用户只能参与一次,这个问题和幂等问题很相似,但是这是在用户级别上控制。
幂等;页面加载高性能;防脚本
(总结升华)秒杀的这个架构是典型的应付突发流量 + 高并发的架构。就我的经验来说,解决这一类问题的关键就是确保系统的瓶颈不会出现在数据库这种比较难以支撑高并发的组件上,而是应该出现在如 Redis 和消息队列上。
高并发=瓶颈在Redis或者MQ上
总结升华一般的高并发架构
高并发系统设计;Redis热点问题;