前言
XA
应用程序(AP):应用程序
事务管理器(TM):交易中间件
资源管理器(RM):数据库
通信资源管理器(CRM):消息中间件
2PC
准备阶段:协调者向所有参与者发起指令,每个参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写 redo 和 undo 日志,然后锁定资源,执行操作,但不提交。
提交阶段:如果所有参与者返回准备成功,即预留资源和执行操作成功,协调者会向所有参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回准备失败,即预留资源或者执行操作失败,协调者会向所有参与者发起中止指令,参与者取消已经变更的事务,执行 undo 日志并释放锁定的资源。
阻塞:事务执行过程中所有参与者都是阻塞型的,占用的资源被一直锁定,不会被释放,第三方参与者访问参与者占有的资源时会被阻塞,影响性能;
单点故障:协调者一旦发生故障,参与者与协调者失去同步,参与者会被一直阻塞。尤其在提交阶段,所有参与者都处于锁定资源状态中,无法完成事务操作;(虽然可以选举出新的协调者,但仍然无法解决参与者被阻塞的问题);
数据不一致:提交阶段协调者向参与者发送提交指令,发生局部网络故障,会出现一部分参与者未收到提交指令无法提交事务的情况,导致多个参与者之间出现数据不一致的现象;
3PC
准备阶段:协调者询问参与者是否可以执行事务提交操作,协调者只需要回答是还是不是,而不需要做真正的操作,这个阶段参与者在等待超时后会自动中止。
预提交阶段:如果在CanCommit准备阶段所有的参与者都返回可以执行操作,协调者向所有参与者发送预提交请求,然后参与者写 redo 和 undo 日志,锁定资源,执行操作,但不提交;如果在CanCommit准备阶段任何一个参与者返回不能执行操作的结果,则协调者向所有参与者发送中止指令。这里与两阶段提交协议的准备阶段是相似的,此阶段的参与者在等待超时后会自动提交。
提交阶段:如果所有参与者在PreCommit预提交阶段都返回成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回失败,也就是预留资源或者执行操作失败,协调者向所有参与者发起中止指令,参与者取消已经变更的事务,执行 undo 日志,释放锁定的资源。这里与两阶段提交协议的提交阶段一致。
如果在CanCommit 准备阶段等待超时,则自动中止;
如果在PreCommit预提交阶段等待超时,则自动提交。






