高并发场景下,优惠券秒杀系统的稳定性与公平性保障

136 阅读2分钟

高并发场景下,优惠券秒杀系统的稳定性与公平性保障

背景

  1. 场景

    • 在“年度超级秒杀”活动中,限量100张(高价值优惠券),活动上线首秒吸引大量用户同时涌入,瞬时峰值QPS达10万次/秒
  2. 核心诉求

    • 服务器稳定性:确保系统在超高并发下不崩溃、不超卖(优惠券库存准确扣减)。

    • 业务公平性保障:保证先到、先点击的用户抢购成功。

回答

这是一个典型的秒杀问题。几千万个并发抢100个库存。

  1. 几个重点问题:

  2. 如何保证前面的人先抢到?

    • 借助 Redis + lua 进行库存扣减。
    • Redis 可以保证命令执行的先后顺序。先来的请求,先进行库存扣减了。
    • 扣减成功,则说明有库存。就可以给他发放优惠券了。(操作数据库)
    • 当库存为0之后,后续的请求再进来,会在 Redis 中操作失败。因为,库存已经没有了,无法扣减了。这样就可以把后续的所有流量都抗在数据库之前了。
  3. 注意:使用 分布式锁+限流 的方案,是没办法保证先后顺序的。