【分布式事务】TCC 补偿型方案

172 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

TCC是一种两阶段提交的思想,第一阶段通过Try进行准备工作,第二阶段Confirm Cancel是Try阶段操作的确认和回滚,在分布式事务场景下,每个服务实现TCC后,作为一个资源,参与到整个分布式事务中,然后主业务服务在第一阶段中分别调用所有TCC服务和Try方法,最后根据第一个阶段的执行情况来决定对第二阶段的提交或者回滚。

对于TCC的工作机制,比如用户通过账户月购买一个产品,涉及到两个事务操作:

  • 在账户服务中,对用户账户余额进行扣减
  • 在产品服务中,对执行产品可申购金额进行扣减。

这两个事务操作在微服务架构下分别对应两个不同的微服务,以及独立的数据库操作,在TCC的工作机制中,先针对账户服务和产品服务分别提交Try、Confirm和Cancel三个方法

  • 在账户服务的Try方法中对实际申购金额进行冻结,Confirm方法把Try方法冻结的金额进行实际的扣减,Cancel方法把Try方法冻结的资金进行解冻。
  • 产品服务的Try方法中将本次申购的部分额度进行冻结,Confirm方法把Try方法中冻结的金额进行实际扣减,Cancel方法把Try方法中冻结的额度进行解冻。

在主业务方法中,分别调用这两个服务对外提供的处理方法(资金扣减、产品申购金额扣减),这两个服务做实际业务处理时,先调用Try方法来做资源预留,如果这两个方法处理正常,TCC事务协调器会调用Confirm方法对预留资源进行实际应用。否则TCC事物协调器感知到其中一个服务的Try方法处理失败,就会调用各个服务的Cancel方法进行回滚。