当前位置:首页 > 科技  > 软件

高并发秒杀方案:热点散列,库存分桶,你需要了解一下

来源: 责编: 时间:2024-02-01 12:48:19 314观看
导读在大规模秒杀活动中,针对单一商品的库存扣减请求峰值可以轻松达到几万、甚至几十万QPS,如常见的抢茅台活动。在这种场景下再基于数据库进行库存扣减就显得无能为力了,记住一个关键指标:在MySQL中,目前单行更新操作的的性能

在大规模秒杀活动中,针对单一商品的库存扣减请求峰值可以轻松达到几万、甚至几十万QPS,如常见的抢茅台活动。在这种场景下再基于数据库进行库存扣减就显得无能为力了,记住一个关键指标:在MySQL中,目前单行更新操作的的性能约为500QPS。对于动辄几万QPS的库存扣减来说,这个量级肯定是偏低了。49Z28资讯网——每日最新资讯28at.com

所以为了应对这种高并发场景,业界提出了一种方案叫 热点散列,即今天群里讨论的库存分桶。49Z28资讯网——每日最新资讯28at.com

其方案如下图所示:将同一商品的库存提前分配至多个“桶”中,根据路由规则(随机、UID取模)将库存请求路由至不同的桶,从而将集中于单实例的请求分散,此方案类似于水平扩展。49Z28资讯网——每日最新资讯28at.com

图片图片49Z28资讯网——每日最新资讯28at.com

至于“分桶”的技术实现,很多技术文章或解决方案都建议采用Redis来实现。具体而言,对任一秒杀活动的商品,可将其分成N份,每份对一个缓存Key,缓存Key的构成必须遵循一定的规律,便于路由,示例如下:49Z28资讯网——每日最新资讯28at.com

key: inventoryId_1,value: 库存数量 49Z28资讯网——每日最新资讯28at.com

key: inventoryId_2,  value: 库存数量 49Z28资讯网——每日最新资讯28at.com

... 49Z28资讯网——每日最新资讯28at.com

key: inventoryId_N,  value: 库存数量49Z28资讯网——每日最新资讯28at.com

在扣减库存时,可以根据Key的编号区间,采用随机算法,UID取模等方式确定一个编号,然后组装Key访问缓存。 49Z28资讯网——每日最新资讯28at.com

举个例子,假如inventoryId为20221821,将库存分配至100个桶,则根据相应Key的区间为[1,100]。49Z28资讯网——每日最新资讯28at.com

服务端收到商品库存扣减请求后,将请求中的参数UID取模,假设UID % 100 = 67,则组装Key为 20221821_67,基于20221821_67扣减对应缓存桶中的库存。49Z28资讯网——每日最新资讯28at.com

热点散列的核心思想为:在缓存中扣减库存,以提升系统的吞吐量;缓存扣减成功后,异步向数据库写入库存扣减流水并更新库存;此外,还需要通过定时任务等机制实现缓存与数据库的库存总量同步。49Z28资讯网——每日最新资讯28at.com

这个方案看上去很不错,但也会存在如下三个问题:49Z28资讯网——每日最新资讯28at.com

一、在缓存中扣减库存如何保证幂等性呢?若幂等性防控不足,则可能出现重复扣减,进而导致少卖。49Z28资讯网——每日最新资讯28at.com

二、缓存写操作和数据库写操作无法通过事务机制来保证强一致性,那么该如何有效的保证库存数据的一致性呢?49Z28资讯网——每日最新资讯28at.com

三、用户所见的库存应为总库存,即便总库存充足,一旦分桶,如何保证用户请求被路由到的分桶油足够的库存呢?49Z28资讯网——每日最新资讯28at.com

所以个人觉得,热点散列在理论上是解决库存热点问题最有效的方案,但在实际应用中,需要考虑的细节非常多。基于缓存的库存扣减的方案是比较粗糙的,它只满足一些特定场景的需要。对于淘宝、京东这类在想商品规模达数十亿的大型电商平台而言,所面临的问题要复杂得多,除了稳定性、可靠性、一致性,还包括库存分配,库存碎片,库存扩缩容、流量倾斜、商品少卖、商品超卖等。49Z28资讯网——每日最新资讯28at.com

上次去阿里交流的时候,阿里专家唐三说:在阿里,库存架构采用的方案是做库存单元化架构,这种方案应该是大型电商平台库存系统的终极解决方案。49Z28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-70416-0.html高并发秒杀方案:热点散列,库存分桶,你需要了解一下

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 大规模敏捷测试怎么做(集成篇)

下一篇: 司空见惯的错误检测,原来还有这么多干货!

标签:
  • 热门焦点
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top