Two/Three Phase Commit
Coordinator
),其他节点为参与者(Cohorts
),节点间可以进行通讯Coordinator
询问所有 Cohorts
是否可以执行 提交操作(vote
),并等待所有 Cohorts
响应Cohorts
询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。(注意:若成功这里其实每个参与者已经执行了事务操作)Cohorts
响应 Coordinator
发起的询问。如果 Cohorts
的事务实际执行成功,则它返回一个 “同意” 消息;如果执行失败,则它返回一个 “中止” 消息Cohorts
在第一阶段响应响应为**“同意”**时:
Coordinator
向所有Cohorts
发出 正式提交(commit
) 的请求Cohorts
正式完成操作,并释放在整个事务期间内占用的资源Cohorts
向 Coordinator
发送 “完成” 消息Coordinator
接收所有 Cohorts
反馈的 “完成” 消息后,完成事务Cohorts
在第一阶段响应为 “中止” 时:Coordinator
在第一阶段询问超时前无法获取所有Cohorts
的响应消息时:
Coordinator
向所有参与者发出 回滚操作(rollback
) 的请求Cohorts
利用之前写入的 undo 信息执行回滚,并释放占用的资源Cohorts
向 Coordinator
发出 回滚完成 消息Coordinator
收到所有 Cohorts
节点反馈的 回滚完成 消息后,取消事务。Cohorts
故障,Coordinator
只能等待超时失败,没有其他容错机制Coordinator
发生故障,Cohorts
会一直阻塞Coordinator
发出 commit 消息后宕机,而唯一接受到这消息的 Cohorts
也宕机,这样即使通过选举重新指定 Coordinator
后,也无法确定事务的状态三个阶段提交有 CanCommit、PreCommit、DoCommit
三个阶段。
Coordinator
向所有 Cohorts
发送 CanCommit
请求,并等待响应Cohorts
接收到 CanCommit
请求后,如果认为自身可以顺利执行事务,则返回 YES 响应,否则返回 NOCohorts
均反馈为 YES 这执行 PreCommit
阶段:
Coordinator
向所有 Cohorts
发送 PreCommit
请求,进入 Prepared 阶段Cohorts
接受到 PreCommit
请求后,执行事务,记录 undo 和 redo 信息Cohorts
执行完事务操作,则返回 ACK 响应 ,并等待最终指令Cohorts
响应为 NO:执行事务的中断Coordinator
没有接收到Cohorts
的响应:执行事务的中断
Coordinator
向所有 Cohorts
发送 abort 请求Cohorts
接收到 abort 请求 之后(或者超时之后),执行事务中断执行提交:
发送提交请求:Coordinator
接受到所有 Cohorts
的 ACK 响应 ,从预提交进入到提交状态,并向所有 Cohorts
发送 doCommit
请求
事务提交: Cohorts
接受到 doCommit
请求之后,执行正式的事务提交,并在完成之后释放所有资源
响应反馈:事务提交完成之后,向Coordinator
发送 ACK 响应
完成事务:Coordinator
接收到所有 Cohorts
的 ACK 响应 之后,完成事务
中断事务:(Coordinator
没有接收到 Cohorts
的 ACK,发送的不是ACK或者超时)
Coordinator
向所有 Cohorts
发送 abort 请求Cohorts
接收到 abort 请求后,利用其在 ProCommit
阶段记录的信息来回滚事务,并释放资源Cohorts
完成事务回滚后,向Coordinator
发送 ACK 消息Coordinator
接收到 Cohorts
反馈的 ACK 消息 后,执行事务的中断DTP模型: 由X/Open组织提出的一种分布式事务模型——X/Open Distributed Transaction Processing Reference Model
DTP 规定的三种角色:
AP
: Aplication 应用系统。即我们开发的业务系统,在业务过程钟,可以使用资源管理器提供的事务接口来实现分布式事务
TM
: Transaction Manager 事务管理器
TM
来完成,TM
提供分布式事务的操作接口,这些接口 TX 接口TM
还管理着所有的资源管理器(RM
),通过它们提供的 XA 接口 来统一调度这些 RM
,以实现分布式事务DTP
只是一个模型,具体 TM
可以采用 2PC, 3PC, Paxos 等协议去实现分布式事务RM
: Resource Manager 资源管理器
能够提供数据服务的对象都可以是 RM
。比如:数据库、消息中间件、缓存等。数据库即为分布式事务中的资源管理器
RM
能够提供单数据库的事务能力,它们通过 XA接口 将本地数据库的提交、回滚等能力提供给 TM
调用,以帮助 TM
实现分布式的实物管理
XA 是 DTP 模型定义的接口,用于向 TM
提供该 RM
(该数据库)的提交、回滚等能力
DTP
只是一套实现分布式事务的规范, RM
具体的实现是由数据库厂商来完成的。
TCC即为Try Confirm Cancel,它属于补偿型分布式事务。
三个步骤:
Try
:尝试待执行的业务
Confirm
:执行业务
Try
阶段预留的业务资源执行业务Cancel
:取消执行的业务
Cancel
阶段,释放所占用资源,回滚 Confirm
阶段执行的操作本文作者:Yui_HTT
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!