分布式系列 Two phase commit protocol (5-上)

二段式提交协议
2PC协议的分布式事务执行模型:该模型由一个用户应用可以直接访问的协作者(coordinator)进程,一组附属进程(subordinate)组成。在执行提交协议的过程中, 附属进程只和协作者进程进行通信,附属进程之间没有通信。我们假设每个事务和进程(进程名称同时指明了进程的位置,进程不会从一个位置迁移到另一个位置)都有全局唯一的名称。协作者进程和附属进程共同完成分布式事务。

正常情况下的2PC协议流程:
协作者进程:
协作者进程通过向每个附属进程发送一个PREPARE消息来初始化2P协议第一阶段,并以此消息来确认附属进程是否同意提交此事务。
附属进程:
1 每个同意提交事务的附属进程首先将一条prepare 日志同步(force-write)写入磁盘,并发送YES VOTE消息给协作者进程
表示同意提交。然后等待协作者进程的最后决定(commit/abort)。此时附属进程不能单方面的提交或放弃此事务。
2 每个不同意提交事务的附属进程首先将一条abort日志同步写入磁盘, 并发送NO VOTE消息给协作者,NO VOTE类似于一票否决权。由于这一票否决,附属进程不需要等待协作者的最后决定即可放弃本地的事务。附属进程放弃提交事务之后,释放持有的锁同时“forget” 此事务。(forget:即将在virtual storgage中和此事务有关的信息释放掉)

协作者:
协作者收到所有的附属进程的投票之后,初始化2P协议的第二阶段。
1 如果所有的投票都是YES VOTE, 协作者首先将commit record日志同步写到磁盘并迁移到committing 状态。然后向所有附属进程发送COMMIT消息。commit record写入磁盘的完成标志着事务到达commit point(原:The completion of the force-write takes the transaction to its commit point.)。过了commit point之后便可以通知用户事务已被提交。
2 如果收到了NO VOTE, 协作者首先将abort record日志同步写到磁盘并迁移到aborting 状态。向所有附属进程(不包括NO VOTE的发送者)发送ABORT消息

附属进程:
1 每个附属进程收到COMMIT消息之后进入committing 状态,将 commit record 同步写入到磁盘并发送ACK消息到协作者。然后提交事务同时”forget”。
2 每个附属进程收到ABORT消息之后,将abort record同步写入磁盘并发送ACK到协作者进入aborting状态。然后放弃事务并”forget”。

协作者进程:
收到所有的来自附属进程的ACK之后,将 end record 日志写入磁盘并”forget”。
每个附属进程必须发送ACK到协作者,协作者进程就可以确定所有附属进程都知道了最后的结果(commit/abort)。先将commit/abort record 写入磁盘再发送对COMMIT/ABORT的ACK,附属进程确定永远不需要向协作者进程查询最后的结果。2P协议的基本准则就是如果附属进程确认(ack)了收到的每个消息,它将确保(在回复ACK之前将收到的消息中的信息写入磁盘)永远不会向协作者再查询和此消息相关的信息。如果不遵循此规则,事务的原子性可能无法保障。
每个进程的日志记录包含以下信息:
1 日志类型(prepare, end等)
2 记录该日志的进程的进程标识
3 事务名称
4 协作者标识
5 持有的互斥锁的名称(prepare 记录)
6 附属进程标识(协作者进程记录commit/abort
总结:
在2P协议执行过程中,每个附属进程同步写两条日志记录(prepare and commit)并发送两条消息给协作者(YES VOTE and ACK)。
协作者进程发送两条消息(PREPARE and COMMIT)给每个附属进程)并同步写两条日志记录(commit, end)

这里写图片描述

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值