2PC: 事务提交分为两个阶段
准备阶段:事务管理器通知资源管理器准备分支事务,记录事务日志,并告知事务管理器准备结果。
提交/回滚阶段:如果所有的资源管理器在准备阶段都明确返回成功,则事务管理器向所有的资源管理器发起事务提交指令完成变更。否则,事务管理器像所有的资源管理器发送回滚指令。
2PC的不足:
同步阻塞:对于任何指令,都必须要有明确的响应才能继续下一步操作。否则一致处于阻塞状态,占用资源。
过于保守:任何一个节点失败都会导致事务回滚。
事务协调者单点故障:如果协调者在第二阶段出现故障,那么其他参与者会一直处于锁定状态。
以上任何一点的出错,都将导致数据不一致问题。
3PC:是2PC的改进版本,它利用超时机制解决同步阻塞问题。事务提交分为三个阶段
询问阶段(CanCommit): 事务协调者向参与者发送事务请求,询问是否可以完成指令,参与者只要回答是或不是
,不需要做真正的事务操作,这个阶段会有超时终止机制。
准备阶段(PreCommit): 事务协调者会根据参与者的反馈结果决定是否继续执行,如果在询问阶段所有参与者都返回可以,则事务协调者会向所有参与者发送PreCommit请求,参与者收到请求后写redo和undo日志,执行事务操作但是不提交事务,然后返回ACK响应等待事务协调者的下一步通知。如果在询问阶段任意参与者返回不能执行操作的结果,那么事务协调者会向所有参与者返送事务中断请求。
提交或回滚阶段(DoCommit): 这个阶段也会存在两种结果,然后根据上一步骤的执行结果来决定DoCommit的执行方式。如果每个参与者在PreCommit阶段都返回成功,那么事务协调者会向所有参与者发送事务提交指令。反之,回滚事务。
来源:oschina
链接:https://my.oschina.net/u/4491726/blog/4659170