浅谈TCC分布式事务

微信扫一扫,分享到朋友圈

浅谈TCC分布式事务

TCC分布式事务,分为三个阶段,Try(尝试)-Confirm(确认)-Cancel(取消),他的本质就是预留资源,比如对状态的变更,对金额的冻结,下面通过一个出库的例子来说明。

仓库人员清单完货品,确认出库,此时系统需要两个操作,一个是库存订单状态从未出库更改为已出库,另外一个是库存的扣减。

try

try的时候就是对资源的预留,比如订单,就要把状态从未出库改为待出库,库存比如是100,此时要加一个冻结库存字段,冻结值为此次的出库数量,假设10,实际库存变成了100-10=90。

try的时候直接在数据库做变更,当然我们并不是直接的变更值,而是先做判断。

比如状态是待出库或者已出库,则此时就不能更改。

比如库存此时不足10,扣减失败。

Confirm

如果符合出库和库存扣减条件,则确认业务,把待出库的状态改已出库,把库存改为90,冻结为0。

Cancel

如果某个条件不满足或者都不满足,则取消业务,把待出库的状态改为未出库,把库存改为100,冻结为0。也就是说把资源恢复到之前的状态。

和2PC区别

  1. TCC对业务的侵入性很大,每个子业务都要写Try-Confirm-Cancel,。2PC是在数据库层面上控制的,对开发者是无感知的。
  2. 2PC是强一致性事务,TCC是最终一致性事务(当然有可能订单服务是try执行成功,库存服务的try执行失败,这个时候要保证多个系统的可用性)。
  3. TCC每个阶段都是本地提交事务,而2PC会一直锁住资源直至整个过程结束,所以TCC的性能更高,有更高的吞吐量。

微信扫一扫,分享到朋友圈

浅谈TCC分布式事务

小霸王声明没有破产是怎么回事 小霸王官网声明全文

上一篇

史上最魔幻创业:他靠吊牌一年入账40亿

下一篇

你也可能喜欢

浅谈TCC分布式事务

长按储存图像,分享给朋友