参考地址: https://www.cnblogs.com/bangerlee/p/5268485.html, 感谢原作者

http://blog.51cto.com/11821908/2058651

2PC

2PC(tow phase commit)两阶段提交[5]顾名思义它分成两个阶段,先由一方进行提议(propose)并收集其他节点的反馈(vote),再根据反馈决定提交(commit)或中止(abort)事务。我们将提议的节点称为协调者(coordinator),其他参与决议节点称为参与者(participants, 或cohorts):

2PC, phase one

在阶段1中,coordinator发起一个提议,分别问询各participant是否接受。

2PC, phase two

在阶段2中,coordinator根据participant的反馈,提交或中止事务,如果participant全部同意则提交,只要有一个participant不同意就中止。

在异步环境(asynchronous)并且没有节点宕机(fail-stop)的模型下,2PC可以满足全认同、值合法、可结束,是解决一致性问题的一种协议。但如果再加上节点宕机(fail-recover)的考虑,2PC是否还能解决一致性问题呢?

coordinator如果在发起提议后宕机,那么participant将进入阻塞(block)状态、一直等待coordinator回应以完成该次决议。这时需要另一角色把系统从不可结束的状态中带出来,我们把新增的这一角色叫协调者备份(coordinator watchdog)。coordinator宕机一定时间后,watchdog接替原coordinator工作,通过问询(query) 各participant的状态,决定阶段2是提交还是中止。这也要求 coordinator/participant 记录(logging)历史状态,以备coordinator宕机后watchdog对participant查询、coordinator宕机恢复后重新找回状态。

从coordinator接收到一次事务请求、发起提议到事务完成,经过2PC协议后增加了2次RTT(propose+commit),带来的时延(latency)增加相对较少。

2PC的缺陷

  1、同步阻塞:最大的问题即同步阻塞,即:所有参与事务的逻辑均处于阻塞状态。
  2、单点:协调者存在单点问题,如果协调者出现故障,参与者将一直处于锁定状态。
  3、脑裂:在阶段2中,如果只有部分参与者接收并执行了Commit请求,会导致节点数据不一致。

  4. 同时去获得锁(这个2pc提交),会不会产生死锁问题?

3PC

3PC(three phase commit)即三阶段提交[6][7],既然2PC可以在异步网络+节点宕机恢复的模型下实现一致性,那还需要3PC做什么,3PC是什么鬼?

在2PC中一个participant的状态只有它自己和coordinator知晓,假如coordinator提议后自身宕机,在watchdog启用前一个participant又宕机,其他participant就会进入既不能回滚、又不能强制commit的阻塞状态,直到participant宕机恢复。这引出两个疑问:

  1. 能不能去掉阻塞,使系统可以在commit/abort前回滚(rollback)到决议发起前的初始状态
  2. 当次决议中,participant间能不能相互知道对方的状态,又或者participant间根本不依赖对方的状态

相比2PC,3PC增加了一个准备提交(prepare to commit)阶段来解决以上问题:

图片截取自wikipedia

coordinator接收完participant的反馈(vote)之后,进入阶段2,给各个participant发送准备提交(prepare to commit)指令。participant接到准备提交指令后可以锁资源,但要求相关操作必须可回滚。coordinator接收完确认(ACK)后进入阶段3、进行commit/abort,3PC的阶段3与2PC的阶段2无异。协调者备份(coordinator watchdog)、状态记录(logging)同样应用在3PC。

participant如果在不同阶段宕机,我们来看看3PC如何应对:

  • 阶段1: coordinator或watchdog未收到宕机participant的vote,直接中止事务;宕机的participant恢复后,读取logging发现未发出赞成vote,自行中止该次事务
  • 阶段2: coordinator未收到宕机participant的precommit ACK,但因为之前已经收到了宕机participant的赞成反馈(不然也不会进入到阶段2),coordinator进行commit;watchdog可以通过问询其他participant获得这些信息,过程同理;宕机的participant恢复后发现收到precommit或已经发出赞成vote,则自行commit该次事务
  • 阶段3: 即便coordinator或watchdog未收到宕机participant的commit ACK,也结束该次事务;宕机的participant恢复后发现收到commit或者precommit,也将自行commit该次事务

因为有了准备提交(prepare to commit)阶段,3PC的事务处理延时也增加了1个RTT,变为3个RTT(propose+precommit+commit),但是它防止participant宕机后整个系统进入阻塞态,增强了系统的可用性,对一些现实业务场景是非常值得的。

3PC的优点和缺陷

  优点:降低了阻塞范围,在等待超时后协调者或参与者会中断事务。避免了协调者单点问题,阶段3中协调者出现问题时,参与者会继续提交事务。
 
  缺陷:脑裂问题依然存在,即在参与者收到PreCommit请求后等待最终指令,如果此时协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。(这个不一致,可能是暂时的)

后记

  无论2PC或3PC,均无法彻底解决分布式一致性问题。
  解决一致性问题,唯有Paxos,后续将单独总结。

小结

以上介绍了分布式系统理论中的部分基础知识,阐述了一致性(consensus)的定义和实现一致性所要面临的问题,最后讨论在异步网络(asynchronous)、节点宕机恢复(fail-recover)模型下2PC、3PC怎么解决一致性问题。

阅读前人对分布式系统的各项理论研究,其中有严谨地推理、证明,有一种数学的美;观现实中的分布式系统实现,是综合各种因素下妥协的结果。

 

转载于:https://www.cnblogs.com/daixianjun/p/2pc-3pc.html

分布式事物-2pc和3pc区别相关推荐

  1. 分布式事务2PC、3PC模型

    工作中使用最多的是本地事务,但是在对单一项目拆分为 SOA.微服务之后,就会牵扯出分布式事务场景 文章以分布式事务为主线展开说明,并且针对 2PC.3PC 算法进行详细的讲解,最后通过一个 Demo ...

  2. .Net Core with 微服务 - 分布式事务 - 2PC、3PC

    最近比较忙,好久没更新了.这次我们来聊一聊分布式事务. 在微服务体系下,我们的应用被分割成多个服务,每个服务都配置一个数据库.如果我们的服务划分的不够完美,那么为了完成业务会出现非常多的跨库事务.即使 ...

  3. 分布式事务2PC、3PC、TCC、RocketMQ事务消息方案详解与对比(详细图解)

    这篇文章将介绍分布式事务中的多种实现方案,及各种分布式事务方案的实现原理.事务执行过程.优缺点,读完这篇文章相信你会对2PC.3PC.TCC.MQ事务消息有个详细的了解 分布式事务的处理方法有哪些? ...

  4. 分布式理论:2pc与3pc

    分布式系统中,人们为了保障多个节点在进行全局事务操作的一致性,提出了很多分布式算法,其中比较著名的有二阶提交协议(Two Phase Commitment Protocol).三阶提交协议(Three ...

  5. 分布式之2PC与3PC提交协议

    在分布式系统中,每一个机器节点虽然都能够明确地知道自己在进行事务过程中的结果是成功或失败,但却无法直接获取到其它分布式节点的操作结果.因此,当一个事物操作需要跨越多个分布式节点的时候,为了保持事务处理 ...

  6. 分布式事物(2PC,3PC,CAP,柔性与刚性事物,LCN)

    转载自  https://blog.csdn.net/lizhen1114/article/details/80110317 分布式事物解决方案 分布式事物产生原因:主要产生与在微服务系统中,数据库的 ...

  7. 谈分布式事务一致性(2PC、3PC、TCC)、强一致性算法Paxos等关系

    一致性这个词重载的很厉害,在不同的语境和上下文中,它其实代表着不同的东西: 在事务的上下文中,比如ACID里的C,指的就是通常的一致性(Consistency) 在集群环境中,主从复制,如ZK(Pax ...

  8. 3pc在mysql的实现_面试官:了解分布式事务?讲讲你理解的2PC和3PC原理

    分布式事物基本理论:基本遵循CPA理论,采用柔性事物特征,软状态或者最终一致性特点保证分布式事物一致性问题. 分布式事物常见解决方案:2PC两段提交协议 3PC三段提交协议(弥补两端提交协议缺点) T ...

  9. 分布式一致性算法—— 2PC与3PC

    文章目录 引出 分布式一致性 为什么也叫分布式事务一致性呢? 解决方案 事务的提交与回滚 几种分布式算法 2PC 概念 过程 优缺点 3PC 过程 优缺点 总结 参考文献 引出 分布式一致性 我们的数 ...

最新文章

  1. 插入排序,希尔排序,堆排序
  2. [剑指offer]8.重建二叉树
  3. Ghost 2.16.3 发布,基于 Markdown 的在线写作平台
  4. mui aniShow 动画属性
  5. SQL Server中的数据库文件组和零碎还原
  6. Ruby设计模式透析之 —— 组合(Composite)
  7. python运行空白_解决pyecharts运行后产生的html文件用浏览器打开空白
  8. Atitit.软件仪表盘(7)--温度监测子系统--电脑重要部件温度与监控and警报
  9. Dematel模型的指标分析
  10. 无线通信模块种类和优点
  11. android车载导航测试,嘟嘟车心安卓车载导航开箱体验
  12. DGPS与RTK的区别
  13. 开发人员聚焦:布兰登·里德(Brandon Reid)
  14. python mysql library,python调用mysql报错解决方案
  15. 2022 我勇敢地走过
  16. 15.学习Camera之——camera理论基础和工作原理
  17. zcmu oj 1087: 统计字符
  18. uni-app 中使用iconfont图标
  19. 本地 Services(服务)
  20. DirectX修复工具增强版更新包

热门文章

  1. 图灵奖得主Raj Reddy:以历史的视角重新审视“人工智能”
  2. 吴恩达《机器学习训练秘籍》:7 条关于项目实践的实用建议
  3. TensorFlow 1.8.0正式发布,Bug修复和改进内容都在这里了
  4. 重大改变!Python 或将取代 VBA 成为 Excel 官方脚本语言
  5. 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单
  6. 为什么阿里巴巴强制要求使用包装类型定义属性?
  7. 超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
  8. 老大批评我不要为了“分库分表”而“分库分表”
  9. combo:机器学习模型合并工具库
  10. 谁是中国大学理科的王者?