二阶段提交

✍ dations ◷ 2025-06-28 04:14:14 #分布式计算,数据管理,计算机科学

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

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

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

.

相关

  • 抑郁症重性抑郁疾患(英语:Major depressive disorder,缩写MDD),也可简称为抑郁症,是一种精神疾患,特征为超过两周的大多数时间都抑郁不已。常常伴随着没有精神、对一般休闲活动没有兴趣、
  • 霍奇金艾伦·劳埃德·霍奇金爵士,OM,KBE,FRS(英语:Sir Alan Lloyd Hodgkin,1914年2月5日-1998年12月20日),英国生理学家与生物物理学家,与安德鲁·赫胥黎(Andrew Fielding Huxley)因为共同研究
  • 纽波特纽波特或新港(英语:Newport)是英国威尔士的第三大城,仅次于卡迪夫和斯旺西,位于威尔士东南,靠近英格兰。整个城市由阿斯克河(Usk)流经市中心。纽波特市区整体以低地为主,甚少山脉,尤以
  • 科达木属见内文科达树(学名:Cordaites)是一属已灭绝的树状植物,与种子蕨类同样由前裸子植物演化而来,为现今银杏类与松柏类植物的祖先。生长在与佛罗里达州大沼泽地相似的湿地中,常在其树
  • 松尾芭蕉松尾芭蕉 (生于宽永21年(1644年),卒于元禄7年10月12日(1694年11月28日)),是日本江户时代前期的一位俳谐师(日语:俳諧師)的署名。他公认的功绩是把俳句形式推向顶峰,但是在他生活的时代,芭
  • 阿拉伯字母U+0600至U+06FF U+0750至U+077F(补充) U+FB50至U+FDCF、U+FDF0至U+FDFF(表现形式A) U+FE70至U+FEFF(表现形式B)阿拉伯语字母,也作天方字母(阿拉伯语:أَبْجَدِيَّة عَر
  • 麦克·米勒马尔科姆·詹姆斯·麦考密克(英语:Malcolm James McCormick,1992年1月19日-2018年9月7日),知名于其艺名麦克·米勒(Mac Miller),美国说唱歌手,词曲作家和唱片制作人。麦克·米勒出生于
  • 菲利普·桑德斯菲利普·“弗利普”·桑德斯(英语:Philip "Flip" Saunders,1955年2月25日-2015年10月25日),生于俄亥俄州克里夫兰,美国职业篮球教练。桑德斯是克里夫兰Cuyahoga Heights高中的明星
  • 克罗地亚独立战争克罗地亚战争指的是1991年到1995年之间,克罗地亚从南斯拉夫联邦独立出来时,克罗地亚人和塞尔维亚人之间因民族对立而引发的战争。克罗地亚军的种族灭绝罪行也受到非议,但国际上
  • 克雷·布克霍尔兹克雷·丹尼尔·巴寇兹(Clay Daniel Buchholz,1984年8月14日-)出生于得克萨斯州内德兰(英语:Nederland, Texas),是美国职棒大联盟的先发投手。2007年9月1日,巴寇兹在他的大联盟第二次