00:00
好,今天来看一道面试题,如何设计一个秒杀系统。它的难度指数4000几。考察的频率啊。60%~70%。对于开发年限。在5年左右。当然呢,现在呢,基本上比如说你说我工作三年,那我们也可以到3~5年。我们今天啊开始来说,那首先第一个呢,是这样的,那首先你得知道什么是秒杀系统,对吧,秒杀系统它的概念。那秒杀系统呢,它是电商。系统中。非常常见的。一种业务模式。他的目的呢,是主要为了吸引。
01:01
用户,然后呢,刺激留存。和消费。而设计的。一种促销活动。啊,这个里面呢,比如说有整点秒杀。然后呢,单个商品的秒杀。等等。好,这是概念。那有了这个概念之后,我们接下来来看一下秒杀系统它的主要的特征。上面的这个是概念1。好,我们来看一下啊,秒杀系统的特征。那么它的特征呢,第一个是。瞬时。
02:04
啊,流量。非常大。那么他过了这个秒杀时间。怎么样?流量就结束了。所以呢。我们不能。使用。堆积器是吧,要机器集群。来提高。那这个QPS。这样的话呢,成本太高。那他过了这时间失效。第二个。秒杀商品啊。那么秒杀商品的库存。
03:01
一般是有限。比如。1万个用户。他去抢。多少台呢?石台。IPhone.16。那么这个时候呢,就是。库存少。但是呢?抢的人多。这种情况下呢。国企压力大?好,第三种情况。就是秒杀时间还没到的时候。还未来临。
04:02
那么未来临呢,那么这个时候啊。刷新量非常大。它会导致。这个服务器啊。静态资源。啊,访问量剧增。好比如说我们十点开始秒杀,那么十点开始秒杀呢,你这个时候9:58呀。9:58,然后呢,9:59一直在进行刷新。好,这时候是不是服务器啊,压力大。啊,大压力是吧。好了,那么第4个呢,就是。你知道了这些特征之后啊。好,我们下面呢,怎么样去设计一下。在做秒杀系统之前的这个。好,这是3个特征。
05:01
那个特征有了之后呢。做这个准备工作。各准备工作呢,就是。大公司,他在做秒杀系统之前的准备工作。比如说呀。他要去策划一场秒杀。首先呢,会选一些商品。因为你不可能所有产品都是表。好,那么这个时候呢,他选商品呢。就是要准备。然后再秒杀。让那个秒杀数据啊,提前放到那个。有缓存的。交付。比如说。缓存大家注意啊,我。这个患者呢,来完成交付。
06:00
这个里面的交付的是哪些呢?比如说我这个库存的数量。比如说有商品的编号。然后这些信息。那么业务方会根据实际的情况。来对创建的这个秒杀活动。压测。那么这个时候看是不是可能。提前预估的并发。看一下是否可以。扛得住。预估的并发。大公司。他们基本上。都会有各种秒杀的这种仲裁来管理各种秒杀活动。啊,业务方呢,往里面录入数据啊。当秒杀系统建立之后啊,这个时候用户就可以。参与秒杀了。这是准备工作。
07:01
在卵巢血管建立之后。基于上面的背景啊,那我们要总结出秒杀系统的关键点。和挑战。就是你要满足哪些观念点啊。那么这个关键点呢,就是高平华,这是一个啊。第二个叫快响应,不能说我我完了之后呢,呃,结果你没有反馈过来是吧。还有一个呢,就是防止。超卖。什么是好卖呢?大家想一想。比如说。我们。我们这个书啊。大数据呢?放到了这个当中,那么是不是有有的时候。因为这个事物的这个气质,你是不是有可能会导致。你怎么样?卖完了是吧。卖完了,但是呢,你你这个秒杀系统。
08:02
库存啊。那么还有一个呢,就是。为了防止。恶意。刷流量。还有就是页面访问量过大的这个问题。另外,秒杀开关。你列表达开关要进行设计。这样的订单。后续业务逻辑。后续。业务逻辑。设计,我们要设计成什么呀,设计成异步是吧。如果说订单,如果订单失效。有没有?我是不是有个补偿机制啊。
09:02
好,另外呢,比如说服务访问到某个地方出问题的时候,我们也要进行服务的降级操作。好,这是我们要考虑的这个重要的问题。这是。第3点。那么第4点我们来看一下。解决方案。好,我们看一下解决方案,第一个。就是要解决这个高跟宽。快响应的问题。那你想解决高并发快钱的这问题呢?因为秒秒杀呀,它一般都在这个这个C端产品是吧。他用不了的。嗯,那个并发量的高。
10:03
那这个时候呢,对服务器来说呀。你要扛得住冰霜。但是。好,这时候要。提前做好压车。压力测试。好,要有好的这个服务器啊嗯。然后在做这个压测的时候。热数据。预加载。好,那我们配置专门的。MQ.还有呢,我可以搞什么呀?前端页面。现代化处理。我还可以找这个CN家属。
11:05
宽带。扩展是吧。都可以。啊,服务器集群。它的负债均衡。等等。这样一套组合下来,它就可以支撑我们高频化当中的快血压问题了。好,第二个来防止超卖。那么防水超卖呢,因为卖的都是一些什么呀。写是吧。那我要防止什么呀,技术问题。由于这个技术问题呢,导致这个。那超卖呢,比如说我们让这个库存啊。变成负数了。这就是很郁闷的是不是?我的在哪,到时候呢,将那个库存数据我摸到那个地方。Ready.在真正秒杀的时候。
12:00
帮我们判断这个库存。它是否充足?和扣减。这两个操作啊。通过脚本来实现。那保证什么呢?大家注意这个原理,保证数据的。原子性。从而来防止炒卖。好的,接下来。防止这个恶意上。那有时候呢,因为有的。你比如说之前爱说有10万卖的时候,如果说卖的非常便宜。只卖100步。价格呢,是原价的50%的人非常。这时候有可能会有一些机器人是吧。
13:01
啊,他来恶意抢单。那恶意抢单呢,就是一种很恶劣的情况,对吧,那你要防止。这样呢,会导致震动的用户,他抢不到这个。也有很多房子。比如说12306啊。来。直接投资是吧。他通过这个战术。那针对这种情况下呢,我们可以通过什么呀,或者机器人嘛,你机器人是不是一直在刷呀,对不对,机器人。一直在刷。那我们可以通过什么呢?限流?来解决。电流的话呢,有两种。一种是这个,呃,用户ID。用缝纫机策略。还有一个呢,是IP。
14:06
好,那有个秒杀是个非常。所以说呢。不用担心因为限制而导致用户体验啊,这个不用担心。是一个人。一人一秒。让那请求多少次啊,4次。啊,一个IP。4次。一些无效请求。这里啊,他无法达到服务器。好,第4个。就是我们的页面访问量过大。
15:01
我这样做的这个工作呢,是。如果提前。将我们的页面静态化啊。那么资源请求你这时候基本上错。资源的智能化。他是干嘛呀,他是不是将这个URL啊。非化处理。我们在进行作量化的时候呢。保证用户呢直接。这个时候呢,你就不需要去。啊,这个大家需要注意啊。我们的目的是直接找到静态资源。嗯。不合服务器。做交互操作。因为只要和服务器做交互,它就会。
16:03
降低服务器的使用。好,同时呢,静态资源也可以加上什么呀CP。好,那么CDA呢,可以采取这个就分发。好,哎,提高资源的。响应。速度和命中率。好了,这是第4个,那么第5个的话呢,我们要设计这个秒杀。入口是吧。秒杀入口的话呢,其实在秒杀系统开始之前。我们的前端页面里面啊。他已经上线了。好,那我们主要是为了限制。
17:01
一些无效的请求。到达后端。好,咱可以将那个按钮啊。体验禁用。提交应用的话。这个时候。倒计时的时候。倒计时的时候。再怎么样,再开放。这样的话呢,也是降低我们的压力。好,第6个。第6个的话呢,就是。后续逻辑为1步。因为代表啥全都是我呢。不需要同步去。所以说呢。我们可以将。
18:01
秒杀成功。的订单我发到什么地方?从不可能太浪费资源是吧,我放到这个MQ。消息不。然后后续的这个服务。他可以慢慢的。慢反馈,慢反馈。给客户。操。这第6个啊,第7个。第7个的话呢,就是订单。失败。补偿机制啊。那如果说。我们应该怎么办呢?我们一般用FQ方式啊。消费失败。消费,我说没说是个消费失败。
19:01
好处。干嘛呀,出事。还有什么呢?报警机制?我可以报警,哎,实时监控。实时监控啊,我们做这个预警操作。好,第8个呢是浮降级。那服务降级的占很多。比如说一些竞品或者人类的问题。好,我导致我们这个秒杀价格。设置有问题。比说你说什么?1元钱。被告什么没有及时的止损?
20:02
我们可以提前处理一些。用户看到一些提示性的。他这个时候就不能在。对应的主要是我们的。出现其他问题的时候,就是我们的服务调用。然出现啊。大问题的时候,比如说这个异常。或者一些bug问题。然后呢,我们这时候可以。通过这个相机。那么降级的话呢。然后呢,回到出现到一个。提示信息页面。好,那这样的话呢,其他啊服务还可以继续。好,我们来小结一下。
21:05
好,那么秒杀这个产品呢?你有可能没有做过,但是面试的时候呢。一些小伙伴。这个不要,为什么问秒杀呢?因为它是涉及到我们微服务高优化开发里面的三高的场景。高并发。高性能。高可用。所以呢,这个时候呢,他问的比较多。那对于秒杀系统呢,大家把握。它的这个特征。刚才我们给大家总结的,以及呢,提前准备的工作。那么重点呢,就是这个。解决的方案。这样。你把握住这3点。那么我们在面试的时候基本上都会非常的轻松。并且我们在后续。你如果。
22:01
真的是实际做或者设计这个秒杀系统的时候呢,也会非常的简单。
我来说两句