2024年关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述,2024年最新2024前端面试心得

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

秒杀抢购系统的成功平稳运行,有一些需要注意的知识点。

1 高并发,以及刷接口等黑客请求对服务端的负载冲击

2 高并发时带来的超卖,即商品数量的控制

3 高负载下,下单的速度和成功率的保证

4 其他

以秒杀单品为例,如抢小米手机。

解决方案探讨:

第一步 限制前端发来的请求量

譬如定在了周二10点开启抢购,那么在之前的一周时间内,都会有预约通知,或者普通的用户浏览。通过预约量、浏览量等数据分析,大概能预估到在周二会参与“点击抢购按钮”的人数。譬如有500万。

此时,我们是知道实际商品数量的,譬如20万。

那么我是没有必要让这500万个请求都到后台的,我最多最多放200万个请求到后台。其他的300万直接就在前端网页看单机动画就好了。

这一步做起来很简单,20万个商品,我提前生成200万个token,在用户点击预约、或者浏览该商品时,就按规则发放出去。(规则可以是譬如公平模式,某个用户id已经预约多次了,还没抢到,那么给他token。也可以就是随机发放,5天的预热时间,每天发4万个就好)

前端接收到是否能参与秒杀的反馈后,就保存在浏览器本地就好,当秒杀开始时,没得到token的用户,就只好在本地看单机动画,过几秒告诉他商品不足就好了。

那些幸运的得到了token的用户,就有了给后台发请求参加秒杀的机会了,此时还需要前端(APP客户端)来对请求进行控制,因为用户喜欢反复点击、反复刷新页面等手段来参加抢购,这时就不能再放重复请求进后台了,哪怕是他重复点击了,也要保证请求不反复发送。

对于大部分吃瓜群众来说,只会操作页面的就通过这种方式控制,但对于程序员们就不行了,即便是你在抢购开始前,没有暴露抢购的接口,但在抢购开始的一瞬间,他们依旧能搞到你的下单接口地址,并开始用程序频繁提交下单请求。

第二步 由网关限制程序过量请求

用程序下单对程序员们都懂,拼接好请求的各个参数,开启并发提交到服务器。

到了这一步,已经不归前端管了,请求会直达负载均衡器,然后到后台网关。

在网关里要控制好这部分请求,要以最快的速度判断出来的每一个请求是否放行到后面的服务。

网关的实现方案有很多,kong(nginx+lua),Gateway,zuul等。在网关里可以简单的实现限流机制,我们主要限制的有如下几种:

1 黑名单(ip、用户id等),可以直接放内存里

2 过多的重复请求(可以采用redis集群计数,对同一个ip、id发起的重复请求给予拒绝),考虑到redis的带宽、性能瓶颈,可以考虑做分片,或者做二级缓存,直接在jvm内存里统计计数

3 没有token的请求,就是之前放出去那批token

限制了非常规请求后,我们假如还有100万个请求在2秒内打到了服务端,这依旧是非常恐怖的数字,即便你有10台服务器,还是有大概率被打满CPU,后面的请求就有面临5秒超时的风险。

此时,我们要做的就是尽快处理完前面的请求,把商品赶紧卖光。100万个请求,20万个商品,那肯定是不能让那80万请求去触碰下单的服务的,我们要在网关处就终结掉这80万个请求,给他们交代你来晚了。

此时你需要令牌桶,如guava的rateLimer就可以,简单好用。譬如我有20个zuul网关服务在运行,单个服务要承担5万个请求,单个tomcat在不做复杂计算、不做数据库操作,做到1-2千的QPS还是可以的。

我每一个zuul服务里譬如开辟1.5万个令牌桶,在1-3秒内放完,得不到令牌桶的就直接返回失败就行了。在这一步失败的耗时会很短,因为在网关层就失败了,不会进入到后面的下单流程。

请注意,这一步是没有用消息队列的,因为大部分请求是要被拒绝的,需要尽快的返回拒绝信息,进队列再慢慢消费就慢了。

令牌桶签发完毕,剩下的请求都是幸运儿,就可以进入到后面的下单流程了。

分享

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值