二阶段提交

✍ dations ◷ 2025-12-03 21:05:41 #分布式计算,数据管理,计算机科学

二阶段提交(英语:Two-phase Commit)是指在计算机网络以及数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法。通常,二阶段提交也被称为是一种协议(Protocol)。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。

需要注意的是,二阶段提交(英语:2PC)不应该与并发控制中的二阶段锁(英语:2PL)混淆。

二阶段提交算法的成立基于以下假设:

以下对二阶段提交算法分阶段进行说明。

有时候,第一阶段也被称作投票阶段,即各参与者投票是否要继续接下来的提交操作。

当协调者节点从所有参与者节点获得的响应消息都为"同意"时:

如果任一参与者节点在第一阶段返回的响应消息为"终止",或者协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时:

有时候,第二阶段也被称作完成阶段,因为无论结果怎样,协调者都必须在此阶段结束当前事务。

下述流程图简单示意了二阶段提交算法中协调者和参与者之间的通信流程

    协调者                                              参与者                              QUERY TO COMMIT                -------------------------------->                              VOTE YES/NO           prepare*/abort*                <-------------------------------commit*/abort*                COMMIT/ROLLBACK                -------------------------------->                              ACKNOWLEDGMENT        commit*/abort*                <--------------------------------  end

"*" 所标记的操作意味着此类操作必须记录在稳固存储(英语:Stable storage)上.

二阶段提交算法的最大缺点就在于它的执行过程中间,节点都处于阻塞状态。即节点之间在等待对方的响应消息时,它将什么也做不了。特别是,当一个节点在已经占有了某项资源的情况下,为了等待其他节点的响应消息而陷入阻塞状态时,当第三个节点尝试访问该节点占有的资源时,这个节点也将连带陷入阻塞状态。

另外,协调者节点指示参与者节点进行提交等操作时,如有参与者节点出现了崩溃等情况而导致协调者始终无法获取所有参与者的响应信息,这时协调者将只能依赖协调者自身的超时机制来生效。但往往超时机制生效时,协调者都会指示参与者进行回滚操作。这样的策略显得比较保守。

.

相关

  • 萨克森-安哈尔特州萨克森-安哈尔特(德语:Sachsen-Anhalt)是德意志联邦共和国的一个州,州府在马格德堡。它与下萨克森州、勃兰登堡州、萨克森州和图林根州相邻。萨克森-安哈尔特的北部是平原,这里的
  • 汉斯·贝特汉斯·阿尔布雷希特·贝特(德语:Hans Albrecht Bethe,1906年7月2日-2005年3月6日),德国和美国犹太裔核物理学家,对于天体物理学,量子电动力学和固体物理学有很重要的贡献。由于恒星
  • 西弗吉尼亚西弗吉尼亚州(英语:State of West Virginia),简称西维州,是美国东部的一个州,有著名的阿帕拉契山脉,景观优美,别称为“山脉之州”。现仍有相当多人认为西弗吉尼亚州属于美国南方,在西
  • 安南山脉安南山脉(越南语:Dãy núi Trường Sơn/.mw-parser-output .han-nom{font-family:"Nom Na Tong","Han-Nom Gothic","Han-Nom Ming","HAN NOM A","HAN NOM B","Ming-Lt-HKSCS
  • 谢苗·沃尔夫科维奇谢苗·伊萨科维奇·沃尔夫科维奇(俄语:Семён Исаакович Вольфкович,1896年11月23日-1980年11月12日),生于阿纳聂夫(今属奥德萨州),苏联化学家,发明家,苏联科学
  • 计算理论计算理论(英语:Theory of computation)是数学的一个领域,和计算机有密切关系。其中的理论是现代密码协议、计算机设计和许多应用领域的基础。该领域主要关心三个方面的问题:这三
  • 始祖鸟科始祖鸟科(学名:Archaeopterygidae)是生活于侏罗纪的一科非鸟恐龙。其下包含了最为知名的始祖鸟。始祖鸟科与早期鸟类不同的是其长及骨质的尾巴,一些物种甚至有较长的第二趾。始
  • 曲靖市曲靖市,古称味县、南宁,是中华人民共和国云南省下辖的地级市,位于云南省东部。市境西临昆明市,北接昭通市与贵州省毕节市,东邻贵州省六盘水市、黔西南州,南界红河州、文山州与广西
  • 爱尔兰战士圣母大学爱尔兰战士队(英语:Notre Dame Fighting Irish)代表圣母大学参加国家大学体育协会(NCAA)第一级别的23项校际体育赛事,其中在许多项目中属于大西洋沿岸联盟。圣母大学也是
  • inotifyinotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。本系统的出现取代了旧有Linux核心里,拥有类似功能之dnotify模块。inotify的原