2PC二阶段提交

        2PC即Two-Phase Commit,二阶段提交。广泛应用在绝大部分关系型数据库,为了使得基于分布式架构的所有节点可以在进行事务处理时能够保持原子性和一致性。

阶段一:提交事务请求

  1. 事务询问。协调者向所有参与者发送事务内容,询问是否可以执行提交操作,并开始等待各参与者进行响应;
  2. 执行事务。各参与者节点,执行事务操作,并将Undo和Redo操作计入本机事务日志
  3. 各参与者向协调者反馈事务问询的响应。成功执行返回Yes,否则返回No。

阶段二:执行事务提交

        协调者在阶段二决定是否最终执行事务提交操作。这一阶段包含两种情形:

执行事务提交:所有参与者reply Yes,那么执行事务提交。

  1. 发送提交请求。协调者向所有参与者发送Commit请求;
  2. 事务提交。参与者收到Commit请求后,会正式执行事务提交操作,并在完成提交操作之后,释放在整个事务执行期间占用的资源;
  3. 反馈事务提交结果。参与者在完成事务提交后,写协调者发送Ack消息确认;
  4. 完成事务。协调者在收到所有参与者的Ack后,完成事务。

中断事务:当存在某一参与者向协调者发送No响应,或者等待超时。协调者只要无法收到所有参与者的Yes响应,就会中断事务。

  1. 发送回滚请求。协调者向所有参与者发送Rollback请求;
  2. 回滚。参与者收到请求后,利用本机Undo信息,执行Rollback操作。并在回滚结束后释放该事务所占用的系统资源;
  3. 反馈回滚结果。参与者在完成回滚操作后,向协调者发送Ack消息;
  4. 中断事务。协调者收到所有参与者的回滚Ack消息后,完成事务中断。

2PC具有明显的优缺点:

优点:实现原理简单;
缺点:

  • 2PC的提交在执行过程中,所有参与事务操作的逻辑都处于阻塞状态,也就是说,各个参与者都在等待其他参与者响应,无法进行其他操作;
  • 协调者是个单点,一旦出现问题,其他参与者将无法释放事务资源,也无法完成事务操作;
  • 数据不一致。当执行事务提交过程中,如果协调者向所有参与者发送Commit请求后,发生局部网络异常或者协调者在尚未发送完Commit请求,即出现崩溃,最终导致只有部分参与者收到、执行请求。于是整个系统将会出现数据不一致的情形;
  • 保守。2PC没有完善的容错机制,当参与者出现故障时,协调者无法快速得知这一失败,只能严格依赖超时设置来决定是否进一步的执行提交还是中断事务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阶段提交(Two-Phase Commit,2PC)和三阶段提交(Three-Phase Commit,3PC)都是分布式事务的协议,用于保证多个节点之间的事务一致性。 阶段提交是一种协议,它将分布式事务分为两个阶段:准备阶段提交阶段。在准备阶段,协调者节点向参与者节点询问是否可以提交事务。如果所有参与者节点都准备好提交,那么协调者节点向所有参与者节点发送提交请求,进行提交阶段。如果有任何参与者节点准备失败或者提交失败,那么整个事务就会失败。因此,阶段提交有一个明显的缺点,就是在提交阶段,所有节点都会被阻塞,等待协调者节点的指令,这可能会导致性能问题。 三阶段提交是在阶段提交的基础上进行改进的。它将分布式事务分为三个阶段:CanCommit、PreCommit、DoCommit。在CanCommit阶段,协调者节点向所有参与者节点询问是否可以提交事务,如果所有参与者节点都同意提交,那么进入PreCommit阶段;在PreCommit阶段,协调者节点向所有参与者节点发送准备提交的指令,如果所有参与者节点都准备好提交,那么进入DoCommit阶段;在DoCommit阶段,协调者节点向所有参与者节点发送提交指令,完成提交。如果在任何一个阶段出现错误,那么就会回滚整个事务。 相比于阶段提交,三阶段提交能够减少阻塞时间,从而提高性能。但是,它也有一些缺点,比如需要更多的通信和协调开销,以及可能存在“悬挂”问题。因此,在实际应用中,需要根据具体的情况选择合适的分布式事务协议。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值