跳到主要内容

秒杀系统的目标与挑战

在正式设计和研发秒杀系统之前,我们一定要明确秒杀系统要实现的目标,并且需要知晓设计和研发秒杀系统存在哪些技术挑战。

一、前言


秒杀系统的建设不是一朝一夕就能完成的,就拿阿里的双 11 秒杀系统来说,也是经历了长时间的优化和迭代不断完善出来的。说的直白些,秒杀系统是一个典型的高并发读和高并发写的系统,最主要的就是要满足三高特性,即:高并发、高性能、高可用。 其中,对技术人员存在相当大的挑战。

二、本章诉求


对于普通用户来说,秒杀系统理解起来是相当简单的,在他们的眼中,秒杀系统其实就是打开商品详情页——> 点击抢购——> 下单——> 支付这样的流程,中间如果抢购不到商品,刷新再次尝试即可。

所以,一个秒杀系统对于普通用户来说,本质上就是抢购——> 下单——> 支付三个步骤。但是,站在技术人员的角度,就不能这么理解秒杀系统了。作为技术人员,需要明确知晓建设秒杀系统的目标,并且在实施过程中会存在哪些技术挑战。

所以,本章,我们主要是站在技术人员的角度来阐述建设秒杀系统时,要实现的目标和存在的技术挑战。

三、秒杀系统的目标


在互联网项目中,几乎大部分项目无外乎会涉及三个端:C 端、B 端和运营端,其中,C 端直面用户,B 端直面企业,运营端也叫做平台端,平台端是 C 端和 B 端的重要保障。所以,秒杀系统的目标一般可以从 C 端、B 端和平台端进行阐述。

3.1 C 端目标

无论是秒杀系统,还是其他的系统,毫无疑问,C 端用户就是上帝。对于 C 端用户这些上帝来说,使用系统时,体验要流畅,数据要准确。不能出现突然的卡顿、白屏、无法加载等,不然这种体验是非常糟糕的,会导致 C 端用户失去对系统的兴趣,慢慢的就会造成用户流失,这种影响就会比较严重。

总结:对于 C 端来说,最重要的目标就是要保证页面流畅不卡顿、不出现白屏、接口要稳定、数据要准确。

3.2 B 端目标

B 端用户一般是企业方,可能是项目的投资方,或者是项目的拥有方,也可能是项目的企业级用户。其实不管是哪一方,本质上都是给设计和研发秒杀系统的人员发 Money 的一方。所以 B 端的用户也得罪不起。对于 B 端用户来说,他们更加关注商品的价格、数量和资金,在这些数据上是不能出错的。

对于参与秒杀的商品来说,秒杀的价格一般是有别于其他商品的,往往会比其他的商品价格要低。哪怕是同一款商品,参不参与秒杀时,价格也是不一样的,所以,对于秒杀商品的价格需要单独隔离渠道。

另一个就是参与秒杀卖出的商品的数量要正确,决不能出现 “超卖” 的问题。什么是 “超卖” 问题,“超卖” 问题就是参与秒杀的商品库存有 100 件,一场秒杀下来发现卖出了 200 件,这就是 “超卖” 了。别说是 200 件了,哪怕是 101 件也不行。“超卖” 的问题很严重,会直接造成资金损失和承诺的服务无法兑现。

再一个就是资金,对于资金的话,一定要安全。对于资金来说,“超卖” 会导致资金损失,另一个就是恶意下单也会造成资金损失。如果友商或者竞争对手,也或者一些恶意用户在秒杀开始的瞬间下单所有的商品,但是没有付款,就会造成整场秒杀活动下来,1 件秒杀商品都没卖出去,同时为宣传、推广这次秒杀活动的成本费用也拿不回来,所以,也会造成资金损失。

总结:对于 B 端来说,最重要的目标就是要保证数据准确、资金安全、价格隔离和渠道隔离。

3.3 平台目标

平台方最首要也是最重要的目标就是保障 C 端目标和 B 端目标的顺利实施,一般在业务上不只有秒杀一种业务,还可能包含有其他业务,比如正常售卖、促销返利、满减优惠等等。所以,在秒杀期间不能影响到其他业务的正常执行。如果将秒杀的流量引到其他业务上,造成系统崩溃或者宕机,是非常严重的事故。

总结:对于平台来说,最重要的目标就是要保证 C 端和 B 端的目标落地,并且要做到业务隔离和数据隔离。

四、秒杀系统的挑战


秒杀系统最重要的核心就是要保证秒杀期间系统的高并发、高性能和高可用。要保证秒杀系统这 “三高” 的落地,其实是不太容易的,面临着很多的技术挑战。在秒杀的业务场景中,需要面临巨大的瞬时流量、热点数据和刷单流量问题。

4.1 巨大的瞬时流量

秒杀场景一个非常突出的特点就是秒杀开始的瞬间,参与秒杀的用户会集中去抢某个热门的商品,会造成巨大的瞬时流量。如果对这些流量不加以控制,让其直接进入系统,会给系统带来巨大的冲击。

首先,这种巨大的瞬时流量很有可能会冲垮系统的门户,造成整个系统不可用。如果系统门户保住了,对这些流量没有做控制处理,使其流入系统会对系统整体造成巨大的冲击,很有可能会造成系统瘫痪,退一步讲,可能造成系统部分服务不可用。即使系统没有被冲垮,系统也会高负载运行,造成整体链路的响应时间变长,会极大的降低用户抢购的体验。系统长时间高负载运行,响应时间变长,后续又会有大量用户的请求进入系统,也难免会引起系统崩溃和宕机。

4.2 热点数据

向秒杀系统这样一个高并发的系统,所有用户在系统中抢购同一件商品,很容易就把一件商品推到了热点的位置。就拿阿里的双 11 来说,一旦某个商品成为热点,不管是使用像 Redis 这种分布式缓存,还是像 MySQL 这种数据库来存储数据,都无法支撑瞬时几十万、上百万的流量对同一个 Key 进行读写操作。像 Redis 这种常用的分布式缓存,最高也只支持几万的 TPS,根本无法支撑瞬时几十万、上百万的流量冲击。

4.3 库存超卖

参与秒杀的商品有个很明显的特点:价格低、商品库存少。也就是大量的用户会瞬时抢购系统中库存为数不多的商品,比如,几十万、上百万用户同时抢购 1000 件商品,如果不加控制,很容易造成商品超卖的问题。

4.4 刷单流量

对于秒杀系统这种高并发的系统来说,还存在一个技术挑战就是刷单流量。如果秒杀系统被一些黄牛或者刷子盯上,他们可能就会通过抓包工具获取到请求数据,然后通过程序或者特定的工具直接调用接口,并且会模拟用户的行为来设置一定的请求频率,以此来增加自己抢购成功的机会。

这种刷单的流量会获得更高的秒杀成功率,但是破坏了秒杀公平的竞争环境,并且也会为秒杀系统带来巨大的流量负担。

五、如何应对挑战

虽然建设秒杀系统会存在众多的挑战,但是也要直面这些挑战,给出对应的应对策略。应对这些挑战最核心的解决方案就是:保证系统的高并发读和高并发写、保证资源的加载速度和打散请求流量。

具体的措施就是保证系统的高并发、高性能、高可用、隔离、流控、削峰、限流、降级、热点和容灾保证系统的响应速度,保证系统中秒杀商品不被超卖,隔离流量和风险,设计有效的缓存策略。针对刷单流量还是应对黄牛和秒杀器等等。

这些具体的策略会放到具体设计和实现秒杀系统的章节中去实现,这里就不详细赘述了。

六、总结

本章,主要介绍了建设秒杀系统的目标和存在的挑战。实现秒杀系统的目标时,需要从 C 端、B 端和平台三个方面去思考需要满足怎样的系统目标。同时,建设秒杀系统的过程中,会面临诸多的挑战,像巨大的瞬时流量、热点数据、库存超卖和刷单流量等,都是在建设秒杀系统中必须要克服的困难和对应的挑战。最后,简单罗列了下,应对秒杀系统的挑战的措施:高并发读、高并发写、高效的加载资源,并且要把流量打散,具体的策略就放到设计和实现秒杀系统具体的章节中。