1、角色区分:协调者、参与者
2、事务流程
阶段一:提交事务请求
1. 协调者向所有参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
2. 参与者,执行事务操作,并将undo、redo信息记入事务日志中。
3. 各个参与者向协调者反馈事务询问的响应
各参与者如果成功执行了事务操作,那么就反馈协调者yes响应,表示事务可以执行;如果参与者没有成功执行事务,那么就反馈给协调者no响应,表示事务不可以执行。
阶段二:执行事务提交
协调者会根据阶段一各参与者的反馈情况来决定是否可以进行事务提交操作,正常情况下包含两种可能:
- 执行事务提交
假如,协调者收到所有参与者的反馈都是yes,那么就会执行事务提交
1. 发送提交请求
协调者向所有参与者,发送commit请求。
2. 事务提交
参与者接收到commit请求后,会执行事务提交操作,并在完成事务提交之后,释放在整个事务执行期间占用的资源。
3. 反馈事务提交结果
参与者在完成事务提交后向协调者发送ack消息。
4. 完成事务
协调者在接受到所有参与者反馈的ack消息后,完成事务。
- 中断事务
假如,任何一个参与者向协调者反馈no,或者在等待超时后,协调者尚无法接收到所有参与者的反馈响应,那么就中断事务
1. 发送回滚请求
协调者向所有参与者发送rollback请求。
2. 事务回滚
参与者,接收到rollback请求后,会利用其在阶段一中记录的undo信息来执行事务回滚操作,并在完成回滚操作后,释放整个事务阶段占用的资源。
3. 反馈事务回滚结果
参与者在完成事务回滚后,向协调者发送ack消息。
4. 中断事务
协调者接收到,所有参与者反馈的ack消息后,完成事务中断操作。