共计 637 个字符,预计需要花费 2 分钟才能阅读完成。
TCC 分布式事务,分为三个阶段,Try(尝试)-Confirm(确认)-Cancel(勾销),他的实质就是预留资源,比方对状态的变更,对金额的解冻,上面通过一个出库的例子来阐明。
仓库人员清单完货品,确认出库,此时零碎须要两个操作,一个是库存订单状态从未出库更改为已出库,另外一个是库存的扣减。
try
try 的时候就是对资源的预留,比方订单,就要把状态从未出库改为待出库,库存比方是 100,此时要加一个解冻库存字段,解冻值为此次的出库数量,假如 10,理论库存变成了 100-10=90。
try 的时候间接在数据库做变更,当然咱们并不是间接的变更值,而是先做判断。
比方状态是待出库或者已出库,则此时就不能更改。
比方库存此时有余 10,扣减失败。
Confirm
如果合乎出库和库存扣减条件,则确认业务,把待出库的状态改已出库,把库存改为 90,解冻为 0。
Cancel
如果某个条件不满足或者都不满足,则勾销业务,把待出库的状态改为未出库,把库存改为 100,解冻为 0。也就是说把资源复原到之前的状态。
和 2PC 区别
- TCC 对业务的侵入性很大,每个子业务都要写 Try-Confirm-Cancel,。2PC 是在数据库层面上管制的,对开发者是无感知的。
- 2PC 是强一致性事务,TCC 是最终一致性事务(当然有可能订单服务是 try 执行胜利,库存服务的 try 执行失败,这个时候要保障多个零碎的可用性)。
- TCC 每个阶段都是本地提交事务,而 2PC 会始终锁住资源直至整个过程完结,所以 TCC 的性能更高,有更高的吞吐量。
正文完