fenixsoft / awesome-fenix

讨论如何构建一套可靠的大型分布式系统

Home Page:https://icyfenix.cn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

可靠事件队列缺乏隔离性,为什么会导致超售?

DongJianquan opened this issue · comments

分布式事务TCC小节中提到可靠事件队列的缺点时有下面一句话:
"譬如在本章的场景事例中,缺乏隔离性会带来的一个显而易见的问题便是‘超售‘:完全有可能两个客户在短时间内都成功购买了同一件商品,而且他们各自购买的数量都不超过目前的库存,但他们购买的数量之和却超过了库存。"。

我对”可靠事件队列缺乏隔离性而导致超售“有些疑问,希望有人可以帮忙解答,我的想法如下:

  1. 在可靠事件队列的场景中扣减货款的时候并不会检查库存,如果扣减货款成功,但是库存并不足,可靠消息队列又不可以再进行失败回滚,这种情况是超售吗?可是导致这种情况出现不是因为缺乏隔离性吧。
  2. 对于仓库服务本身来说,扣减库存操作不是在一个本地事务进行的吗?如果是在一个本地事务中,那不就可以通过加锁的操作避免超卖吗?是因为多个每个仓库服务节点都使用不同的数据库,而没有办法保证强一致性吗?