一、为什么需要秒杀系统?
电商平台本质是在线上撮合买卖双方的购销需求,达成交易。虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动。当供求平衡时,买方和卖方处于对等关系,双方相对稳定和谐;当供大于求时,这时候市场成了买方市场,买方处于主动地位;当供不应求时,这时候市场是卖方市场,卖方处于有利主导地位。
当供需出现极度不平衡时,不管是线下还是线上,会出现抢购的情况,这需要秒杀系统。对极度供不应求的爆品,设置合理活动,释放库存,可以持续为电商平台带来稳定的热度和流量,可观的 VIP 会员费,以及技术口碑的认同。当然,也可以对参与用户进行筛选,杜绝黄牛和刷子,让爆品惠及更广,更公平。
案例:
-
促销活动
促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。 -
爆品上架
当 1499 元平价茅台上架时,当抢到口罩意味着守护更多一份健康时,流量激增,更是盛况空前。具体12306的春节抢票、各大电商搞的定时抢购活动,如小米手机的在线抢购
二、秒杀系统是什么?挑战点有哪些?目标及衡量指标
2.1 秒杀流程
把技术挑战放在一边,先从用户或是产品的角度来看一下,秒杀的流程是什么样的。
- 首先,你需要一个秒杀的 landing page,在这个秒杀页上有一个倒计时的按钮。
- 一旦这个倒计时的时间到了,按钮就被点亮,让你可以点击按钮下单。
- 一般来说下单时需要你填写一个校验码,以防止是机器来抢。
从技术上来说,这个倒计时按钮上的时间和按钮可以被点击的时间是需要后台服务器来校准的,这意味着:
- 前端页面要不断地向后端来请求,开没开始,开没开始……
- 每次询问的时候,后端都会给前端一个时间,以校准前端的时间。
- 一旦后端服务器表示 OK 可以开始,后端服务会返回一个 URL。
- 这个 URL 会被安置在那个按钮上,就可以点击了。
- 点击后,如果抢到了库存,就进入支付页面,如果没有则返回秒杀已结束。
这个不断轮询的过程,就好像大家等着抢。你想想,有 100 万人来不停地询问有没有开始了这个事,估计后端也扛不住。
2.2 挑战点
面对上面我们要解决的技术问题,我们的技术上的挑战就是怎么应对这 100 万人同时下单请求?100 万的同时并发会导致我们的网站瞬间就崩溃了,一方面是 100 万人同时请求,我们的网络带宽不够,另一方面是理论上来说要扛 100 万的 TPS,需要非常多的机器。
但是最恐怖的是,所有的请求都会集中在同一条数据库记录上,无论是怎么分库分表,还是使用了分布式数据库都无济于事,因为你面对的是单条的热点数据。
1、短时间内高并发,系统负载压力大
2、竞争的资源有限,数据库锁冲突严重
3、避免对其他业务的影响
秒杀设计要面对的压力和难度有几点:
怎么保证超高的流量和并发下系统的稳定性?如果峰值的QPS达到几十万,面对巨大的流量的压力系统怎么设计保证不被打崩?
怎么保证数据最终一致性?比如库