二阶段提交

✍ dations ◷ 2025-11-26 09:16:33 #分布式计算,数据管理,计算机科学

二阶段提交(英语: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)上.

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

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

.

相关

  • 资料数据(英语:data),是指未经过处理的原始记录。一般而言,数据缺乏组织及分类,无法明确的表达事物代表的意义,它可能是一堆杂志、一叠报纸、数种开会记录或是整本病人的病历纪录。数据
  • 鲜味鲜味(日语:うま味, 英语:umami)和甜、酸、苦、咸一样,为五种基本味觉之一。其词源源自日语“旨味”,概念泛指某种食物十分美味。20世纪以来,科学家一直争论鲜味是否确实是一种基本
  • 半胱氨酸半胱氨酸(Cysteine,可简写为Cys或C)是20种天然氨基酸之一,是一种含硫(与甲硫氨酸一样)的非必需氨基酸。动物体内可经由甲硫氨酸和丝氨酸合成。有缓解修复放射线对人体的损伤作用
  • 肺吸虫卫氏肺吸虫(学名:Paragonimus westermani,又译卫氏并殖吸虫)为斜睾目住胞科并殖属的动物。是一种扁平似似咖啡豆的寄生虫,是肺吸虫症致病原中最重要者,必须透过数种中间宿主才能感
  • span class=nowrapAgIOsub3/sub/span碘酸银(AgIO3)是一种由银,碘和氧组成的白色晶体。不像大多数金属碘酸盐,它在水中不溶。碘酸银可由硝酸银(AgNO3)与碘酸钠反应获得。反应的副产物是硝酸钠。
  • 烈火青春烈火青春可以指:
  • 台儿庄古城台儿庄古城,位于中国山东省枣庄市台儿庄区。原台儿庄古城在1938年台儿庄战役中严重毁损,后于2009年至2013年重建。台儿庄景区被列入国家5A级旅游景区。明朝万历三十四年(1604年
  • 哈勒尔贝克哈勒尔贝克(荷兰语:Harelbeke),比利时西佛兰德省部的一座城市,人口26,172(2006年)。
  • 百家乐百家乐(意大利语:baccarà或baccarat)是扑克游戏,亦是赌场中常见的赌博游戏之一。百家乐源于意大利,十五世纪时期传入法国,及至十九世纪时盛传于英法等地。时至今日,百家乐是世界各
  • 2014年云南地震2014年云南地震,可以指: