本文讨论内容不包含秒杀,仅仅是最普遍的库存模型而已,重点讨论如何避免超卖
,少卖
。
1、 基本概念
1.1 超卖
实际库存已经为0,但是依旧卖出去了。可能导致商家无货可发。
1.2 少卖
明明有货,但是库存被锁定,导致商家货卖不出去。
2、 分布式事务简述
2.1 消息事务+最终一致性
所谓的消息事务就是基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊利用,
它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功成功并且对外发消息成功,
要么两者都失败,开源的RocketMQ就支持这一特性,具体原理如下:
- 1、A系统向消息中间件发送一条预备消息
- 2、消息中间件保存预备消息并返回成功
- 3、A执行本地事务
- 4、A发送提交消息给消息中间件
通过以上4步完成了一个消息事务。对于以上的4个步骤,每个步骤都可能产生错误,下面一一分析:
- 步骤一出错&#