1、TCC简介
分布式事务是指在分布式系统中,多个服务之间需要保证数据的一致性和完整性的场景。传统的单机事务无法满足分布式系统的需求,因此需要引入一种新的事务模型来解决分布式事务问题。
TCC(Try-Confirm-Cancel)是一种基于补偿机制的分布式事务模型,它将一个分布式事务拆分为三个阶段:Try、Confirm和Cancel。每个参与者(服务)都需要提供这三个阶段对应的业务逻辑,以保证在不同的情况下能够达到数据的最终一致性。
- Try阶段:在这个阶段,每个参与者尝试执行业务操作,并预留必须的业务资源,例如锁定库存、冻结账户余额等。如果所有参与者都成功执行了Try操作,则进入下一个阶段;否则,执行Cancel操作,释放预留资源,回滚事务。
- Confirm阶段:在这个阶段,每个参与者确认执行业务操作,并提交预留资源,例如扣减库存、扣款账户余额等。如果所有参与者都成功执行了Confirm操作,则事务完成;否则,执行Cancel操作,释放预留资源,回滚事务。
- Cancel阶段:在这个阶段,每个参与者取消执行业务操作,并释放预留资源,例如解锁库存、解冻账户余额等。这个阶段只有在Try或Confirm失败时才会触发。
TCC模型的优点是:
- 无需依赖第三方中间件或数据库来实现分布式事务,降低了系统复杂度和成本。
- 无需锁定全局资源,提高了系统的并发性能和可用性。
- 适用于各种类型的业务场景,只要能够定义出清晰的Try、Confirm和Cancel逻辑。
TCC模型的缺点是:
- 需要开发人员手动编写三个阶段的业务逻辑,并保证其正确性和一致性,增加了开发难度和维护成本。
- 需要考虑各种异常情况和边界情况,并提供相应的补偿策略和重试机制,增加了系统复杂度和风险。
- 需要引入一个TCC分布式事务框架来管理和协调各个参与者的状态和行为,例如国内开源的ByteTCC、Himly、TCC-transaction。
2、支持TCC的中间件
以下是一些支持TCC的流行事务中间件:
- Atomikos: Atomikos是一个Java事务管理器(TM),提供了对TCC事务模型的支持。它可以与Spring等框架集成,并提供了可靠的分布式事务管理能力。
- Narayana: Narayana是JBoss事务管理器(TM)的开源版本,支持TCC事务模型。它具有高度可扩展性和可靠性,可以与各种Java应用程序集成。
- Seata: Seata是一个开源的分布式事务解决方案,支持TCC模型和其他事务模型。它提供了高性能和高可用性的分布式事务管理能力,并可以与Spring Cloud、Dubbo等微服务框架无缝集成。
- ByteTCC: ByteTCC是一个轻量级的TCC事务中间件,适用于高并发场景。它提供了简单易用的API,并且支持自动回滚和恢复功能。
这些事务中间件都具有各自的特点和适用场景,可以根据具体需求选择合适的中间件来支持TCC事务模型。此外,一些主流的数据库也提供了自身的分布式事务解决方案,例如MySQL的XA事务和Oracle的Global Transaction Services(GTS)等,可以根据具体数据库选择相应的解决方案。
3、TCC相关问题
如果发现某个服务的Cancel或者Confirm一直没成功,会不停的重试调用他的Cancel或者Confirm逻辑,务必要他成功。
===================================
如果文章对你有帮助,请不要忘记加个关注、点个赞!