一、两段式
1、请求阶段(commit-request phase,或称表决阶段,voting phase)
事务询问。协调者向所有参与者发送事务内容,询问是否可以进行事务提交操作,然后就开始等待参与者的响应。
执行事务。各参与者节点执行事务操作(本地事务),并将Undo和Redo信息记入事务日志中。
各参与者向协调者反馈事务询问的响应。同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。
2、提交阶段(commit phase)
在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。
当且仅当所有的参与者同意提交,事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者回滚事务。
两段式的缺点
1、同步阻塞问题。
执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。
2、单点故障
当协调者出错,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。
3、
第二阶段当协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了,那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。
4、数据不一致
在二阶段提交的阶段二中,