面试题答案
一键面试三阶段提交(3PC)协议的三个阶段及核心机制
- CanCommit阶段
- 主要作用:协调者向所有参与者发送包含事务内容的CanCommit请求,询问是否可以执行事务提交操作。参与者根据自身情况,比如资源可用性、事务一致性等检查,如果可以则返回Yes响应,表示可以进行事务;否则返回No响应。此阶段主要是初步探询所有参与者是否具备执行事务的条件。
- PreCommit阶段
- 主要作用:若在CanCommit阶段所有参与者都返回Yes响应,协调者向所有参与者发送PreCommit请求,进入预提交状态。参与者接收到PreCommit请求后,会执行事务操作,并将Undo和Redo信息记录到事务日志中。此时事务其实已在参与者端执行,但未正式提交,处于一种“准提交”状态,为最终提交做准备。如果有任何一个参与者在CanCommit阶段返回No响应,或者协调者在等待响应过程中出现问题,协调者会向所有参与者发送Abort请求,参与者收到后会中断事务。
- DoCommit阶段
- 主要作用:当协调者接收到所有参与者对PreCommit的ACK响应(表示参与者已完成PreCommit阶段操作),协调者向所有参与者发送DoCommit请求,参与者接收到该请求后正式提交事务,完成整个事务流程。若协调者在等待参与者对PreCommit的ACK响应超时而未收到全部响应,或者有参与者发送的ACK响应异常,协调者会向所有参与者发送Abort请求,参与者收到后回滚事务。这一阶段决定了事务是最终提交还是回滚。