分布式(二)2PC、3PC、paxos

2PC

2PC,Two-Phase Commit,二阶段提交。

阶段一(事务请求、执行)

  1. 事务询问
    协调者询问各参与者是否准备好开始事务。
  2. 执行事务
    各参与者节点执行事务操作,并将Undo与Redo信息记录到日志里面。
  3. 各参与者向协调者反馈事务询问的响应
    如果所有的参与者反馈都是ok,则会在第二阶段进行提交事务。如果任何一个参与者反馈是失败的,那么第二阶段将对事务进行回滚。

阶段二(提交事务或回滚)

各参与者都回复ok(提交事务):

  • 发送提交请求
    协调者向各参数者发送事务可以进行提交的请求
  • 事务提交
    各参与者进行事务的提交
  • 反馈事务提交结果
    各参与者发送事务提交的结果给协调者
  • 完成事务
    协调者收到各参数者的反馈信息,完成事务

有任何一个参数与回复失败(中断事务):

  • 发送回滚请求
    协调者向所有参与者节点发送Rollback的请求
  • 事务回滚
    各参与者进行事务的回滚
  • 反馈事务回滚结果
    各参与者将回滚的结果(ACK 消息)反馈给协调者
  • 中断事务
    协调者收到所有参与者的ACK消息,完成事务的中断

优缺点

优点:原理简单,实现方便。
缺点:

  1. 同步阻塞
    在二阶段提交的执行过程中,其他节点都在等待事务的完成,直到最后一个节点反馈完信息,才算完成事务。所有节点都无法进行其他操作,直到事务完成。
  2. 单点问题
    只有一个协调者,如果协调者出现了问题,事务就无法进行下去。如果在过程中发生故障,则会造成数据不一致的问题。
  3. 数据不一致
  4. 太过保守
    没有完善的容错机制,一个发生错误则会导致所有的事务全部失败。

3PC

3PC对于2PC的最主要的阻塞的缺点进行了改进,将二阶段拆解成了2个部分(预提交、提交)。

阶段一:CanCommit

  • 事务询问
  • 各参与者反馈询问的响应
    与2PC一样,有失败就进行回滚,否则进行预提交。

阶段二:PreCommit

执行事务预提交:

  • 发送预提交请求
  • 事务预提交
  • 各参与者向协调者反馈事务执行结果

中断事务:

  • 发送中断请求
  • 中断事务

阶段三:doCommit

执行提交:

  • 发送提交请求
  • 事务提交
  • 反馈事务提交结果
  • 完成事务

中断事务:

  • 发送中断请求
  • 事务回滚
  • 反馈回滚结果
  • 中断事务

三阶段会出现单点问题,或者是 协调者和参与者之间存在网络故障。遇到以上问题,参与者们如果等待超时了还是会继续完成事务的提交。

优缺点:

优点:相对于2PC,3PC降低了阻塞的范围,并且能够在出现单点问题的时候还行保持一致性。
缺点:在第三阶段的时候,出现单点问题还是会出现数据不一致的问题。

PAXOS

同2PC一样存在,2个阶段。里面涉及到的有3个角色。
1.Proposer 2.Acceptor 3.leaner
阶段一:

  • Proposer prepare一个提案(编号为Mn)给一个成员超过半数的Acceptor子集
  • 一个Acceptor收到编号 (Mn)的提案,如果已有编号中没有编号超过Mn的,则会接受Mn并返回已有编号中最大的value值(v0)。(Acceptor 里面保存的可以看成是「编号:value值」这样的形式),同时承诺promise不会接受比Mn小的编号请求。

阶段二:

  • Proposer收到来自半数以上的Acceptor对其的响应,则会发送一个Accepte请求并附上[Mn,v0]。如果acceptor里面没有任何值,v0值则是就是任意值。
  • 如果Acceptor还没有对比编号Mn还大的prepare请求作出响应的话,则会通过[Mn,v0]方案。

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值