TCC设计理解-概念分解(1)

TCC和Spring的传播机制

分布式事务是分布式链路后同样在开发过程中需要重点考虑的问题,先从基本的概念和自身的理解入手。

Spring事务的传播机制是在不同事务场景下如何进行事务的控制

TCC作为补偿型的分布式事务,需要满足的是最终一致性,通过TCC形式实现分布式场景下的操作要么全部成功,要么全部失败。

作为分布式事务中的基本事务单元就是常规的事务,在Spring容器下可以理解成一个Spring的事务,然而这些事务并不是组合起来就是分布式事务,仅仅是作为基本单元解决的是单一业务无需再考虑单个业务的一致性问题,降低单个业务的一致性复杂度,从这个角度上说TCC分布式事务可以理解成多个业务间的一致性问题,这些一致性问题会要求在不同业务之间的各种组合嵌套关系上,在业务结束之后,达到最终一致性。

而作为单个业务事务的传播机制而言,存在的最大问题就是如何在最终一致性上做到补偿措施,即成功补偿、失败补偿。

一个事务的成功可以通过简单的commit提交,失败的事务可以通过rollback回滚,TCC场景下最终一致性面临的问题可能会事:

  • 如何界定业务在TCC3个环节下所需要做的事情,也就是业务分工
  • 如何在业务中制定各种业务组合关系中的Leader,作为事务最终一致性的决策者,也就是成功和失败的决策人
  • 如何在通信中设计业务事务的成功和失败的依据
  • 单个成功的业务,在分布式场景失败的场景下需要作出的回滚动作,如何恢复现场
  • 如何做到Leader在成功和失败场景下的二次通信调用,以及该通信的可靠性设计
  • 如何实现Leader自身的可靠性补偿措施,确保最终一致性

TCC的设计图简单明了,但是真正深入到业务中会有太多的问题需要考虑,因此设计一个特定场景下的TCC事务难度会降低不少。

另外,在最基本的一致性场景下,比如可能需要特别注意的幂等操作,在TCC场景下同样是需要的。