TCC分布式事务定义
TCC全称叫Try-Confirm-Cancel,翻译过来就是尝试、确认、取消,是一种用于分布式事务处理的解决方案。
TCC分布式事务模式
TCC模式将整个事务拆分为三个阶段:尝试(Try)、确认(Confirm)和取消(Cancel)。
TCC的每个阶段对应一个操作,确保事务最终一致性。
第一步:尝试(Try)阶段
在尝试阶段,事务参与者尝试预留资源并执行业务逻辑,但是并不直接修改数据库或其他外部状态。
第二步:确认(Confirm)阶段
如果所有事务参与者的尝试阶段都执行成功,并且没有出现错误,那么就进入确认阶段。
在确认阶段,事务参与者真正执行对数据库和外部状态的修改,并释放之前预留的资源。
第三步:取消(Cancel)阶段
如果任何一个事务参与者在尝试阶段出现错误,或者在确认阶段出现错误,那么就需要进入取消阶段。
在取消阶段,事务参与者撤销之前的尝试阶段所做的操作,以保持数据的一致性。
TCC分布式事务原理
TCC分布式事务本质也是一种两阶段提交(2PC)的替代方案,只不过进行了改进而已。
2PC是一种阻塞性事务模型,全称是Two-phase commit,将事务拆分为两个阶段:准备(Prepare)和提交(Commit)。
两阶段提交协议(2PC),该协议是目前最常用的分布式事务解决方案之一。
如下图所示:
从上图可以非常清洗的看见,整个过程分为如下2大阶段:
第一阶段: prepare
每个参与者执行本地事务但不提交,进入 ready 状态,并通知协调者已经准 备就绪。
第二阶段:commit
当协调者确认每个参与者都 ready 后,通知参与者进行 commit 操作,如果有 参与者 fail ,则发送 rollback 命令,各参与者做回滚。
2PC是由数据库或事务管理器提供的一种标准的分布式事务解决方案,可以通过数据库的XA接口来实现,但2PC面临着阻塞问题和单点故障的风险。
而TCC分布式事务方案其实是两阶段提交的一种改进,可以说 TCC 就是应用层的 2PC。
- Try 操作对应2PC 的一阶段准备(Prepare)
- Confirm 对应 2PC 的二阶段提交(Commit)
- Cancel 对应 2PC 的二阶段回滚(Rollback)
改进后变成如下图所示:
TCC分布式事务是一种补偿性事务模型,将事务拆分为三个阶段:尝试(Try)、确认(Confirm)和取消(Cancel)。
try阶段通过预留资源的方式避免了同步阻塞资源的情况,但是TCC编程需要业务自己实现try,confirm,cancle方法,对业务入侵太大,实现起来也比较复杂。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》