2PC阶段:两段提交指分布式节点事务的提交由两个阶段组成
- 准备阶段(投票阶段):
(1)协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。(vote)
(2)参与者节点操作与回应:(如权限验证失败)直接返回失败;
执行本地事务操作,写本地redo和undo日志但不提交,本地事务操作成功则返回同意,操作失败返回中止
- 提交阶段(执行阶段)
前提:所有参与者操作成功,返回同意
- 协调者节点向所有参与者节点发出“正式提交”请求
- 参与者完成操作,并且释放在整个事务期间占用的资源
- 参与者节点向协调者发送“完成”消息
- 协调者节点接收到所有参与者节点的“完成”消息后完成事务
前提:任一参与者操作失败,返回失败或者中止
- 协调者节点向所有参与者节点发出“回滚操作(rollback)”请求
- 参与者节点利用之前写入的undo信息执行回滚,并释放在整个事务期间占用的资源
- 参与者节点向协调者节点发送回滚完成消息
- 协调者收到所有参与者节点的“回滚完成”消息后,取消事务
2pc过程总结:(简单来说)
分布式系统中事务的ACID原则需要协调者进行组织协调以保证分布式节点上对同一事务的数据一致性。
首先,协调者向所有参与者发送询问是否提交事务并等待参与者回复,若参与者权限验证失败(或者有其他情况)则直接返回失败,若参与者执行本地操作并且成功完成redo与undo但不提交则返回成功,若执行失败则返回中止。
协调者收到所有参与者成功后,向所有参与者发送“正式提交”操作,参与者完成操作并释放占用的资源,向协调者发送“完成事务”消息,协调者收到所有消息后则整个事务执行完成; 若有参与者在上一阶段操作失败,则所有参与者执行回滚,并释放占用资源,向协调者发送消息,协调者收到参与者所有消息后,取消事务。