C/C++教程

分布式事物-TCC

本文主要是介绍分布式事物-TCC,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

什么是TCC

TCC(Try-Confirm-Cancel)的概念,最早是由 Pat Helland 于 2007 年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出。

TCC 是应用端的二阶段编程模型,其 Try、Confirm、Cancel 3 个方法均由业务编码实现:

  • Try 操作作为一阶段,负责资源的检查和预留。
  • Confirm 操作作为二阶段提交操作,执行真正的业务。
  • Cancel 是预留资源的取消。

TCC处理流程

Try阶段

TCC 机制中的 Try 仅是一个初步操作,它和后续的确认一起才能真正构成一个完整的业务逻辑,这个阶段主要完成:

  • 完成所有业务检查( 一致性 ) 。
  • 预留必须业务资源( 准隔离性 ) 。
  • Try 尝试执行业务。

TCC 事务机制以初步操作(Try)为中心的,确认操作(Confirm)和取消操作(Cancel)都是围绕初步操作(Try)而展开。

因此,Try 阶段中的操作,其保障性是最好的,即使失败,仍然有取消操作(Cancel)可以将其执行结果撤销。

以电商为例

用户下单涉及到

                   1.生成订单 (订单服务)

                   2.扣减库存(库存系统)

                   3.扣除积分(积分系统)

                   4.生成出库单(配送系统)

情况一没有出现任何异常的情况

try阶段

         1.开启事物

         2.创建订单

         2.根据业务单号冻结库存

         3.根据业务单号冻结积分

         4.生成出库单出库单号为待确认

根据try阶段的结果执行commit或者rollback

Confirm阶段

1.commit(没有任何异常)

        1.根据业务单号实际扣除库存(可能出现timeout 或者socketException 则重试直到成功 需要做幂等)

        2..根据业务单号实际扣除积分(可能出现timeout 或者socketException 则重试直到成功 需要做幂等)

        3.将出库单改为已确认((可能出现timeout 或者socketException 则重试直到成功 需要做幂等)

        4.提交事物

2.rollback(部分步骤失败 执行rollback)

        比如冻结积分返回积分不足,则回滚事物,根据业务单号执行取消冻结(可能出现timeout 或者socketException 则重试直到成功 需要做幂等)

         

 

这篇关于分布式事物-TCC的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!