一致性协议

2PC 二阶段提交

在这里插入图片描述

  • 阶段一 提交事务请求

    • 协调者向所有的参与者节点发送事务内容,询问是否可以执行事务操作,并等待其他节点的反馈
    • 各参与者节点执行事务操作
    • 各参与者节点反馈给协调者,事务是否可以执行
  • 阶段二 事务提交

    根据阶段一各个参与者节点反馈的ack,如果所有参与者节点反馈ack,则执行事务提交,否则中断事务提交。

    • 事务提交
      • 1、 协调者向各个参与者发送commit请求
      • 2、 参与者节点接收到commit请求后,执行事务的提交操作。
      • 3、 各参与者节点完成事务提交后,向协调者返送提交commit成功确认消息
      • 4、 协调者接受各个参与者节点的ack后,完成事务commit。
    • 中断事务
      • 1、 发送回滚请求
      • 2、 各个参与者节点回滚事务
      • 3、 反馈给协调者事务回滚结果
      • 4、 协调者接受各参与者节点ack后回滚事务

问题:

  • 同步阻塞: 二阶段提交过程中,所有参与事务操作的节点处于同步阻塞状态,无法进行其他的操作

  • 单点问题: 一旦协调者出现单点故障,无法保证事务的一致性操作

  • 脑裂导致数据不一致:

    如果分布式节点出现网络分区,某些参与者未收到commit提交命令。则出现部分参与者完成数据提

    交。未收到commit的命令的参与者则无法进行事务提交,整个分布式系统便出现了数据不一致性现

    象。

3PC 三阶段提交

是2PC的改进版, 实质是将2PC中提交事务请求拆成了两部分,形成了CanCommit、PreCommit、DoCommit三个阶段的事务一致性协议。

在这里插入图片描述

  • 阶段一 CanCommit

    • 事务询问
    • 各个参与者节点反馈事务询问的响应
  • 阶段二 PreCommit

    根据阶段一的反馈结果分为两种情况:

    • 1、执行事务预提交
      • 发送预提交请求: 协调者向所有参与者节点发送preCommit请求
      • 事务预执行: 各参与者节点接收到preCommit请求后,执行事务操作
      • 各参与者节点向协调者反馈事务执行
    • 2、 中断事务:① 任意一个参与者节点反馈No时 ②等待超时后 , 协调者就中断事务
      • 协调者向各个参与者节点发送abort请求
      • ① 参与者收到abort请求后 ②或是等待超时,中断事务
  • 阶段三 DoCommit

    • 执行提交
      • 发送提交请求
      • 参与者事务提交
      • 反馈事务提交结果
      • 协调者接收到各个参与者ack后,完成事务
    • 中断事务
      • 参与者接收abort后,执行事务回滚
      • 参与者完成事务回滚后,向协调者发送ack
      • 协调者接收ack,回滚事务。

3PC相较于2PC而言,解决了协调者挂点后参与者无限阻塞和单点问题,但是仍然无法解决网络分

区问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值