第八章 TCC 分布式事务原理
一、TCC 核心思想
TCC分布式事务最核心的思想就是在应用层将一个完整的事务操作分为三个阶段。在某种程度上讲,TCC 是一种资源,实现了 Try、Confirm、Cancel 三个操作接口。与传统的两阶段提交协议不同的是,TCC 是一种在应用层实现的两阶段提交协议,在 TCC 分布式事务中,对每个业务操作都会分为 Try、Confirm 和 Cancel 三个阶段,每个阶段所关注的重点不同,如下图所示:

Try 阶段
Try阶段是准备执行业务的阶段,在这个阶段尝试执行业务,重点关注如下事项:
1、 完成所有的业务检查,确保数据的一致性;
2、 预留必要的业务资源,确保数据的隔离性;
在下单扣减库存的业务场景中,如果使用了 TCC 分布式事务,则需要在 Try 阶段检查商品的库存数量是否大于或者等于下单提交的商品数量,如果商品的库存数量大于或者等于下单提交的商品数量,则标记扣减库存数量。此时的商品数量并没有真正扣减,只是做资源预留操作,并且会将订单信息保存到数据库,标记为待提交状态。如果商品的库存数量小于下单提交的商品数量,则提示用户库存不足,并且删除提交的订单数据或者将订单状态标记为删除
Confirm 阶段
Confirm 阶段是确认执行业务的阶段,在这个阶段确认执行的业务。此时,重点关注如下事项:
1、 真正执行业务;
2、 不做任何业务逻辑检查,直接将数据持久化到数据库;
3、 直接使用Try阶段预留的业务资源;
在下单扣减库存的业务场景中,由于在 Try 阶段已经检查过商品的库存数量大于或者等于下单提交的商品数量,因此在 Confirm 阶段不会进行二次检查,直接将订单的抓过你太更新为 “已提交”,并且真正执行扣减库存操作。在 Confrim 阶段是真正地执行业务操作,其间不会做任何业务检查,直接使用 Try 阶段预留的业务资源
Cancel 阶段
Cancel 阶段取消执行业务,重点关注如下事项:
1、 释放Try阶段预留的业务资源;