阿里面试官:高并发大流量秒杀系统如何正确的解决库存超卖问题?(建议收藏)

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

付款减库存

既然下单减库存存在问题,我们再来看看付款减库存。库存减库存就是用户提交订单后,并不会立刻扣减商品的库存。而是等到用户真正付款后才会扣减库存。这种方式经常遇到的问题就是:用户明明下单成功了,却不能付款。 原因就是用户下单时,不会扣减库存,而是等到真正付款后才会扣减库存,当某个用户下单后,执行付款操作时,相应的商品可能已经被其他人买走了。

付款减库存有可能会造成另一个更为严重的后果:**库存超卖。**这主要就是用户提交订单的时候不会扣减库存,造成用户成功下单的订单数量可能会远远大于商品的库存数量。

预扣减库存

预扣减库存比起前面两种扣减库存的方式,相对来说复杂一些。用户提交订单后,为用户预留购买数量的商品库存,例如预留10分钟,超过10分钟,则释放为用户预留的库存,其他的用户可以继续下单购买。

用户下单预扣减库存之后,在付款时,系统会检验对应的订单是否存在有效的预留库存,如果存在,则真正扣减库存并付款。如果不存在,则会再次尝试预扣减库存。如果库存不足,则不再付款。如果预扣减库存成功,则真正扣减库存并付款。

那么,预扣减库存是否能够解决前面两种扣减库存的问题呢?

答案是,并没有彻底解决。

例如,对恶意下单来说,虽然将有效的付款时间控制在一小段时间内,但是恶意用户完全有可能在一段时间后再次下单。也有可能会在开始下单时,就会一次性选择所有的库存下单。仍然不能彻底解决问题。

那有没有什么办法解决这些问题呢?我们继续往下看。

扣减库存问题的解决


针对恶意用户下单的情况,我这里简单罗列了如下几种解决方案:

(1)我们可以为经常提交订单之后不付款的用户添加对应的标签,当这些用户下单时,进行特殊处理,例如不扣减库存等(具体可以根据需求确定)。

(2)在秒杀期间,为商品设置同一个人的最大购买件数,比如最多购买2件。

(3)对不付款重复下单的操作进行限制,例如,对同一商品下单时,首先校验当前用户是否存在未付款的订单,并且订单中的商品与再次下单的商品是同一款商品,则提示先让用户付款后再提交订单等。

针对库存超卖的情况,我这里简单罗列了如下几种解决方案:

(1)通过补货解决。

(2)用户下单时提示库存不足。

秒杀系统如何扣减库存?


也许有不少小伙伴会说高并发秒杀系统会采用预扣减库存的方式,其实,在真正的高并发、大流量场景下,大部分秒杀系统会采用 下单减库存 的方式。

在下单扣减库存的业务场景中,需要保证大流量、高并发下商品的库存不能为负。

这里,我们可以通过如下方案解决商品库存不能为负的问题、

(1)在扣减库存后,通过在应用程序的事务中判断商品库存是否为负数,如果变成了负数,则回滚事务不再扣减库存。

(2)在数据库中设置库存字段为无符号整数,从数据库层面保证无法出现负数的情况。

说了这么多,原来在高并发、大流量的秒杀系统中,实现正确的扣减商品的库存确实不是一件容易的事情呀!

写在最后


如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~

推荐阅读:

惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

image.png

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 阿里体系的分布式系统可以通过使用集群和分布式计算技术来处理高并发问题。可以采用负载均衡技术,将访问量大的服务器负载均衡到多台服务器上,从而提高系统的处理能力,提高系统的可用性。此外,还可以通过缓存技术减少数据库的查询,从而提高系统的响应速度。 ### 回答2: 基于阿里体系的分布式系统可以通过以下几种方法来处理高并发问题。 1.拆分和分布式:将系统按照功能模块进行拆分和分布式部署,将负载均匀分摊到多个节点上,提高系统的并发处理能力。阿里体系采用了微服务架构,将系统拆分成多个独立的服务,每个服务都可以进行横向扩展,从而提高并发处理能力。 2.负载均衡:通过负载均衡算法,将用户请求均匀地分发到各个服务器上,避免单点故障和资源瓶颈。阿里体系的分布式系统使用了负载均衡器,如Nginx等,通过合理的负载均衡策略,将用户请求分发到各个可用的服务器上,从而提高系统并发能力。 3.缓存技术:通过使用缓存技术,将一些频繁访问的数据存储在高速缓存中,减少对底层数据库的访问压力,提高系统响应速度。阿里体系的分布式系统中广泛使用了分布式缓存技术,如Redis等,通过将热点数据放入缓存中,减少对数据库的访问次数,提高系统的并发度。 4.异步处理:将一些耗时长的业务逻辑进行异步处理,将请求放入消息队列中,由后台任务进行处理,避免前端线程的阻塞,提高系统的并发处理能力。阿里体系的分布式系统使用了消息队列技术,如RocketMQ等,通过异步处理消息,解耦前后端的耦合,提高系统的并发性能。 综上所述,基于阿里体系的分布式系统处理高并发问题的方法包括拆分和分布式部署、负载均衡、缓存技术和异步处理等。这些方法可以有效提高系统的并发处理能力,保证系统的稳定性和高性能。 ### 回答3: 基于阿里体系的分布式系统有多种方法来处理高并发问题。首先,它利用了分布式架构的优势,将系统拆分成多个子系统,每个子系统都可以独立处理一部分请求,从而降低了单个系统的并发压力。 其次,阿里体系的分布式系统采用了分布式缓存技术,例如使用Redis等缓存系统,可以将频繁访问的数据缓存在内存中,提高系统的响应速度,降低数据库的压力。 此外,该系统还采用了负载均衡技术,通过将请求分发到多个服务器上,实现了请求的分流,进一步提高了系统的并发处理能力。 还有一个重要的方法是,基于阿里体系的分布式系统采用了分布式数据库技术,例如阿里云的RDS数据库,可以将数据存储在不同的节点上,实现数据的分片和分布,从而提高了数据的读写并发能力。 此外,系统还采用了异步处理和消息队列等技术来解耦请求和处理逻辑,降低了系统的耦合度,提高了系统的并发处理能力。 总之,基于阿里体系的分布式系统通过拆分架构、缓存、负载均衡、分布式数据库、异步处理和消息队列等技术来处理高并发问题,提高了系统的并发处理能力和可伸缩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值