随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题。
    分布式事务由多个局部性质的资源管理器ResourceManager简称RM、1个全局性质的事务管理器TransactionManager简称TM和1个应用程序ApplicationProgram组成。
    RM、TM和ApplicationProgram的概念将贯穿本文 :::info 二阶段提交:XA ::: XA事务控制分为两阶段:

    1. 第一阶段(prepare):即所有的参与者RM准备执行事务并锁住需要的资源。参与者ready时,向TM报告已准备就绪。
    2. 第二阶段 (commit/rollback):当事务管理者(TM)确认所有参与者(RM)都ready后,向所有参与者发送commit命令。

    如果有任何一个参与者prepare失败,那么TM会通知所有完成prepare的参与者进行回滚。以转账为例,Out代表转出,In代表转入,一个成功完成的XA事务时序图如下:
    image.png :::info 长事务治理:SAGA ::: Saga的核心思想是将长事务T拆分为多个本地短事务{T1,T2,T3,Tn}依次执行,此后任何一个子事务执行失败,Saga事务协调器就会反序调用rollback补偿操作{C3,C2,C1}。拆分后的本地事务无锁,子事务只需按序执行commit,不用像XA事务那样长期锁定资源账户Accont
    image.png
    一个成功完成的SAGA事务时序图如下:
    image.png :::info 三阶段提交TCC:Try,Confirm,Cancel ::: TCC的Confirm/Cancel阶段要求幂等且不允许返回失败,如果因为网络故障导致Confirm/Cancel不能返回成功,TM会不断的重试直到Confirm/Cancel返回成功。TCC分为如下三个阶段:

    • Try 阶段:尝试执行,完成所有业务一致性检查,预留必须的业务资源
    • Confirm阶段:真正执行,不作任何业务检查,只使用Try阶段预留的业务资源
    • Cancel阶段:取消执行并释放Try阶段预留的业务资源

    以转账为例,通常会在Try里面冻结金额,但不扣款,Confirm里面扣款,Cancel里面解冻金额,一个成功完成的TCC事务时序图如下:
    image.png