二阶段提交

✍ dations ◷ 2025-12-04 18:52:05 #分布式计算,数据管理,计算机科学

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

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

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

.

相关

  • 骨盆腔发炎感染骨盆腔发炎(Pelvic inflammatory disease,PID)也称为盆腔炎,指的是女性子宫或输卵管受到感染的情形,有些定义也包含卵巢感染。骨盆腔发炎时常无明显的症状可能病征有下腹痛、阴道
  • 有袋目有袋上目(学名:Marsupialia)动物是雌性个体的腹部下长有育幼袋的哺乳类动物,如袋鼠、袋狼、树袋熊、负鼠、袋貂、袋狸等。现存物种如袋鼠、树袋熊主要分布于澳洲及附近岛屿,负鼠
  • 世界悬索桥列表本列表按照悬索桥的主跨长度(即桥塔间距)排列。主跨长度是最常用的比较悬索桥大小的参数,通常涉及到桥梁的设计和建造,与桥塔高度和工程复杂性相关联。悬索桥的结构型式能够实现
  • 温莎市name = 'Transport', description = '交通', content = {{ type = 'text', text = [[]] }, { type = 'item', original = 'articulated bus', rule = 'zh-cn:铰接客车;zh-tw
  • 乌拉城乌拉部故城,位于中国吉林省吉林市龙潭区乌拉街满族镇旧街村,是明代海西女真乌拉国都城——乌拉城。城池可追溯至1140年代开始修筑的洪尼罗城。渤海国时期,在今旧街西北1公里处
  • 西马西马(英语:CYMA)是1862年在瑞士成立的钟表制造商,并为宝光实业旗下成员。1862年,西马于瑞士侏罗山区(Jura Mountains)成立,Joseph Schwob和Theodore Schwob进驻当地开设制表业,专注发
  • 永泰永泰(765年正月—766年十一月)是唐代宗的年号,共计2年。吐鲁番出土有《唐永泰三年后麦粟帐》,可见当时因吐蕃骚扰阻碍交通,与中原交通不变的西州仍用永泰年号至少直至“永泰三年
  • 富春县富阳区是中国浙江省杭州市的市辖区,位于杭州市西南部,与西湖区、萧山区、余杭区、临安区和桐庐县接壤,距杭州市中心32公里,辖区总面积1831平方公里,户籍人口65.9万(常住人口71.7万
  • 伊万诺夫卡 (楚河州)伊万诺夫卡(吉尔吉斯语:Ивановка)是吉尔吉斯斯坦楚河州伊塞克阿塔区下辖的一个村。在1968年至1993年为市级镇,于1993年5月8日改制为村。该村位于楚河南岸,距托克马克以西
  • Propperpropper是美国著名的军队服装制造商。从1967年向美国军队提供作战服,是美国军队、执法部门等机构制服的主要供应商之一。它也会制作军装仿制版本和其他衣服在市场销售,价格较