三阶段提交算法 3PC(Three-phase commit)
将二阶段提交协议的“提交事务请求”过程一分为二,形成了由 CanMommit、PreCommit和doCommit三个阶段组成的事务处理协议。
CanMommit
- 事务询问:协调者向所有的参与者发送一个包含事务内容的 canCommit 请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
- 各参与者向协调者反馈事务询问的响应
参与者在接收到来自协调者的 canCommit 请求后,正常情况下,如果其自身认为可以顺利执行事务,那么会反馈Yes响应,并进入预备状态,否则反馈 No 响应。
PreCommit
协调者会根据各参与者的反馈情况来决定是否可以进行事务的 PreCommit 操作。
- 执行事务预提交:如果协调者从所有的参与者获得的反馈都是 Yes 响应,那么就执行事务预提交
- 发送预提交请求:协调者向所有参与者节点发送 preCommit 的请求,并进入 Prepared 阶段。
- 事务预提交:参与者接收到 preCommit 请求后,会执行事务操作,并将 Undo 和 Redo 信息记录到事务日志中
- 各参与者向协调者反馈事务执行的响应:如果参与者成功执行了事务操作,那么就会反馈给协调者AcK 响应,同时等待最终的指令:提交(commit)或中止(abrot)
- 中断事务:如果任何一个参与者