写点什么

商品库存管理和秒杀系统设计(19/100)

作者:hackstoic
  • 2022 年 3 月 08 日
  • 本文字数:1494 字

    阅读完需:约 5 分钟

商品库存管理和秒杀系统设计

在电商系统中扣减库存是一步非常关键的操作,例如秒杀系统中一定要防止超卖情况出现,如果商家设置了 100 件库存但是最后卖出 1000 件,这样就会产生资金损失。

以下内容参考了十来篇技术文章,汇总了不同的设计方案。仅供参考。

基于不同底层技术的四种扣减方案

  • 通过 MySQL 乐观锁扣减库存[1]

udpate goods set stock = stock - #{acquire} where sku_id = #{skuId} and stock - #{acquire} >= 0
这条语句可以保护库存资源防止超卖,我们不妨分析这条语句为什么生效。

复制代码
  • 通过 Redis 在缓存扣减库存[2]

查询缓存要比查询数据库快,所以将库存数放在缓存中,直接在缓存中扣减库存。如果并发很高,还可以采取分布式锁的方案

  • 基于数据库+缓存的热点扣减库存[3]

缓存虽然可以保证不会超卖,但是由于纯缓存方案不具备事务性,在极端情况下,存在缓存的数据无法回滚。因此结合缓存扣减更新库存保证性能,而利用数据库的事务特性来保证数据的最终一致性,和纯数据库方案不一样的地方在于,数据库只做插入,不做更新


  • Redis + MQ + MySQL 保证库存安全,满足高并发处理[4]

利用 Redis increment 的原子操作,保证库存安全,利用 MQ 保证高并发响应时间。但是事需要把库存的信息保存到 Redis,并保证 Redis 和 Mysql 数据同步。缺点是 redis 宕机后不能下单。 increment 是个原子操作。

其它参考资料

  • Redis 架构实战:高并发情况下并发扣减库存[5] *****

  • 优惠劵系统库存设计浅谈[6]


基于不同业务阶段的库存扣减的方案对比


参考来源: 浅析「扣减库存」的方案设计[7]

6 种库存超限的处理方案


参考来源: 你所不知道的库存超限做法[8]

基于 MQ 的商品库存扣减方案

创建订单时预占库存,预占成功,则进行订单创建。 用户支付成功后,发送扣减库存消息到 MQ,库存服务进行库存真正扣减; 订单取消,发送释放库存消息到 MQ,库存服务释放库存。

参考来源: 库存扣减方案[9]

结合数据库和 Redis 的高并发扣减方案

扣减库存其实包含两个过程:第一步是超卖校验,第二步是扣减数据的持久化;在传统数据库扣减中,两步是一起完成的。抗写的实现原理其实是巧妙的利用了分离的思想,分离开防超卖和数据持久化;首先防超卖是由 Redis 来完成的;通过 Redis 防超卖后,只要落库就可以;落库通过任务引擎,业务数据库使用商品分库分表,任务引擎任务通过单据号分库分表,热点商品的落库会被状态机分散开,消除热点。

原文提供了非常详细的方案设计,包括流程图,架构图,原理图和注意点等。可以阅读原文获取更多信息。

参考来源: 电商库存系统的防超卖和高并发扣减方案[10]

秒杀系统设计

其它参考资料

  • 浅谈秒杀系统架构设计[11]

参考资料

[1]

MySQL 乐观锁扣减库存原理图解: https://juejin.cn/post/7046905194512121886

[2]

浅析「扣减库存」的方案设计: https://juejin.cn/post/6969964751619112996

[3]

23 讲搞定后台架构实战学习-扣减秒杀场景: https://juejin.cn/post/6964337427565510669

[4]

这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!: https://juejin.cn/post/6850037282246754318

[5]

Redis 架构实战:高并发情况下并发扣减库存: https://juejin.cn/post/6995481370269057032

[6]

优惠劵系统库存设计浅谈: https://juejin.cn/post/6844903782191480840

[7]

浅析「扣减库存」的方案设计: https://juejin.cn/post/6969964751619112996

[8]

你所不知道的库存超限做法: https://juejin.cn/post/6844903751661125646

[9]

库存扣减方案: https://juejin.cn/post/6858815974515818503

[10]

电商库存系统的防超卖和高并发扣减方案: https://juejin.cn/post/7023369492159791118

[11]

浅谈秒杀系统架构设计: https://juejin.cn/post/6844903448278728711

发布于: 刚刚阅读数: 2
用户头像

hackstoic

关注

还未添加个人签名 2017.11.24 加入

TGO深圳会员,某创业公司技术负责人, 专注领域:架构设计/技术管理/区块链/投资

评论

发布
暂无评论
商品库存管理和秒杀系统设计(19/100)_技术方案_hackstoic_InfoQ写作平台