分布式事务2PC/3PC

萝らか妹 提交于 2020-11-09 09:58:47

2PC: 事务提交分为两个阶段

准备阶段:事务管理器通知资源管理器准备分支事务,记录事务日志,并告知事务管理器准备结果。

 

提交/回滚阶段:如果所有的资源管理器在准备阶段都明确返回成功,则事务管理器向所有的资源管理器发起事务提交指令完成变更。否则,事务管理器像所有的资源管理器发送回滚指令。

2PC的不足:

    同步阻塞:对于任何指令,都必须要有明确的响应才能继续下一步操作。否则一致处于阻塞状态,占用资源。
    过于保守:任何一个节点失败都会导致事务回滚。
    事务协调者单点故障:如果协调者在第二阶段出现故障,那么其他参与者会一直处于锁定状态。
    以上任何一点的出错,都将导致数据不一致问题。

 

3PC:是2PC的改进版本,它利用超时机制解决同步阻塞问题。事务提交分为三个阶段

    询问阶段(CanCommit):    事务协调者向参与者发送事务请求,询问是否可以完成指令,参与者只要回答是或不是

                                               ,不需要做真正的事务操作,这个阶段会有超时终止机制。

    准备阶段(PreCommit): 事务协调者会根据参与者的反馈结果决定是否继续执行,如果在询问阶段所有参与者都返回可以,则事务协调者会向所有参与者发送PreCommit请求,参与者收到请求后写redo和undo日志,执行事务操作但是不提交事务,然后返回ACK响应等待事务协调者的下一步通知。如果在询问阶段任意参与者返回不能执行操作的结果,那么事务协调者会向所有参与者返送事务中断请求。

    提交或回滚阶段(DoCommit): 这个阶段也会存在两种结果,然后根据上一步骤的执行结果来决定DoCommit的执行方式。如果每个参与者在PreCommit阶段都返回成功,那么事务协调者会向所有参与者发送事务提交指令。反之,回滚事务。

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!