秒杀系统的目标与挑战
在正式设计和研发秒杀系统之前,我们一定要明确秒杀系统要实现的目标,并且需要知晓设计和研发秒杀系统存在哪些技术挑战。
一、前言
秒杀系统的建设不是一朝一夕就能完成的,就拿阿里的双 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 巨大的瞬时流量
秒杀场景一个非常突出的特点就是秒杀开始的瞬间,参与秒杀的用户会集中去抢某个热门的商品,会造成巨大的瞬时流量。如果对这些流量不加以控制,让其直接进入系统,会给系统带来巨大的冲击。
首先,这种巨大的瞬时流量很有可能会冲垮系统的门户,造成整个系统不可用。如果系统门户保住了,对这些流量没有做控制处理,使其流入系统会对系统整体造成巨大的冲击,很有可能会造成系统瘫痪,退一步讲,可能造成系统部分服务不可用。即使系统没有被冲垮,系统也会高负载运行,造成整体链路的响应时间变长,会极大的降低用户抢购的体验。系统长时间高负载运行,响应时间变长,后续又会有大量用户的请求进入系统,也难免会引起系统崩溃和宕机。