如何解决秒杀的高并发和超卖的问题?

一、秒杀的问题

秒杀或抢购活动一般会经过【预约】【抢订单】【支付】这3个大环节,而其中【抢订单】这个环节是最考验业务提供方的抗压能力的。

抢订单环节一般会带来2个问题:

  1、高并发

  比较火热的秒杀在线人数都是10w起的,如此之高的在线人数对于网站架构从前到后都是一种考验。

  2、超卖

  任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难题。

二、如何解决

总的来说就是:前端三板斧(扩容、限流、静态化),后端两条路(内存加排队)。

1)前端:

扩容:加机器,这是最简单的方法,通过增加前端池的整体承载量来扛峰值。

限流:一般都会采用IP级别的限流,即针对某一个IP限制单位时间内发起的请求数量,或者活动入口的时候增加游戏或者

问题环节进行销峰操作。

静态化:将活动页面中所有的可静态化元素全部静态化,并尽量减少动态元素,通过CNN(加速服务器)来扛峰值。

2)后端:

内存:将库存从MySQL前移到Redis中,所有的读写操作放到内存中,由于Redis中没有锁,所以不会存在相互等待,并且

Redis的读写性能都远高于MySQL,这就解决了性能问题。

排队:引入队列,然后将所有写DB操作在单队列中排队,完全串行处理。当达到库存阀值的时候就不在消费队列,并关闭购买功能。这就解决了超卖问题。

你可能感兴趣的:(如何解决秒杀的高并发和超卖的问题?)