标签:消息 str com red 返回 没有 判断 不同的 abort
三阶段提交在协调者和参与者中引入超时机制,并且把两阶段提交的第一阶段拆分为两步:询问,然后锁住资源,最后真正提交。
协调者向参与者发送commit请求,参与者如果可以提交就返回Yes响应,否则返回No响应。(如何判断是否可以提交不同的算法有不同的机制,但主要作用是确定Cohort具备基本的完成Commit条件,并不会执行事务操作)
事务询问。Coordinator向Cohort发送CanCommit请求。询问是否可以执行事务提交操作。然后开始等待参与者的响应。
响应反馈。Cohort接到CanCommit请求之后,正常情况下,如果其自身可以顺利执行事务,则返回Yes响应,并进入预备状态。否则反馈No
Coordinator根据Cohort的反应情况来决定是否可以继续事务的PreCommit操作。根据响应情况,有以下两种可能。假如Coordinator从所有的Cohort获得的反馈都是Yes响应,那么就会进行事务的预执行:
假如有任何一个Cohort向Coordinator发送了No响应,或者等待超时之后,Coordinator都没有接到Cohort的响应,那么就中断事务:
该阶段进行真正的事务提交,也可以分为以下两种情况。
执行提交
中断事务
Coordinator没有接收到Cohort发送的ACK响应(可能是接受者发送的不是ACK响应,也可能响应超时),那么就会执行中断事务。
标签:消息 str com red 返回 没有 判断 不同的 abort
原文地址:https://www.cnblogs.com/we9999/p/12395294.html