对两阶段提交协议的理解

2022-08-02T17:18:23

分布式系统的⼀个难点是如何保证架构下多个节点在进⾏事务性操作的时候保持⼀致性。为实现这个⽬的,⼆阶段
提交算法的成⽴基于以下假设:
该分布式系统中,存在⼀个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以
进⾏⽹络通信。
所有节点都采⽤预写式⽇志,且⽇志被写⼊后即被保持在可靠的存储设备上,即使节点损坏不会导致⽇志数据
的消失。
所有节点不会永久性损坏,即使损坏后仍然可以恢复。 ## 第⼀阶段(投票阶段)
协调者节点向所有参与者节点询问是否可以执⾏提交操作(vote),并开始等待各参与者节点的响应。
参与者节点执⾏询问发起为⽌的所有事务操作,并将 Undo信息和 Redo信息写⼊⽇志。(注意:若成功这⾥
其实每个参与者已经执⾏了事务操作)
各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执⾏成功,则它返回⼀个”同意”消
息;如果参与者节点的事务操作实际执⾏失败,则它返回⼀个”中⽌”消息。
第⼆阶段(提交执⾏阶段) 当协调者节点从所有参与者节点获得的相应消息都为”同意”:
协调者节点向所有参与者节点发出”正式提交(commit)”的请求。
参与者节点正式完成操作,并释放在整个事务期间内占⽤的资源。
参与者节点向协调者节点发送”完成”消息。
协调者节点受到所有参与者节点反馈的”完成”消息后,完成事务。如果任⼀参与者节点在第⼀阶段返回的响应消息为”中⽌”:
协调者节点向所有参与者节点发出”回滚操作(rollback)”的请求。
参与者节点利⽤之前写⼊的 Undo信息执⾏回滚,并释放在整个事务期间内占⽤的资源。
参与者节点向协调者节点发送”回滚完成”消息。
协调者节点受到所有参与者节点反馈的”回滚完成”消息后,取消事务。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »