面试题答案
一键面试两阶段提交(2PC)协议基本工作流程
- 准备阶段(投票阶段)
- 协调者向所有参与者发送
Prepare
消息,询问是否可以提交事务。 - 参与者收到
Prepare
消息后,执行事务操作(如写入日志到本地,但不提交),然后向协调者反馈Yes
或No
。如果参与者自身事务执行失败,或者资源不足等原因无法提交事务,则返回No
;若一切正常则返回Yes
。
- 协调者向所有参与者发送
- 提交阶段(执行阶段)
- 成功提交情况:如果协调者收到所有参与者的
Yes
反馈,那么向所有参与者发送Commit
消息。参与者收到Commit
消息后,正式提交事务,并释放占用的资源。 - 回滚情况:只要有一个参与者返回
No
,或者在规定时间内没有收到部分参与者的反馈,协调者就会向所有参与者发送Rollback
消息。参与者收到Rollback
消息后,回滚事务,撤销之前执行的事务操作。
- 成功提交情况:如果协调者收到所有参与者的
2PC在分布式系统数据恢复策略中的角色
2PC 协议为分布式系统数据恢复提供了基础保障,确保在部分节点故障或通信故障的情况下,整个分布式事务要么全部提交,要么全部回滚,维护数据的一致性。它定义了事务执行过程中的标准流程和状态转换,使得系统在故障恢复时能够依据这些流程和状态进行正确的数据恢复操作。
与数据恢复紧密相关的关键步骤
- 准备阶段日志记录:参与者在准备阶段执行事务操作并记录日志。这些日志是数据恢复的关键依据,即使在节点故障后重新启动,也可以通过回放日志来恢复到事务执行前的状态或者继续完成事务提交。
- 协调者决策记录:协调者记录每个参与者的投票结果以及最终的决策(提交或回滚)。在协调者故障恢复时,这些记录可以帮助协调者确定是继续提交事务还是回滚事务,从而向参与者发送正确的指令。
- 提交或回滚指令的持久化:无论是协调者发送的
Commit
或Rollback
消息,还是参与者对这些指令的接收确认,都应该进行持久化记录。这样在系统出现故障后,能够依据这些记录来判断事务最终的执行状态,确保数据的一致性恢复。例如,如果参与者收到了Commit
指令并持久化记录,但在提交事务过程中发生故障,重启后可以依据该记录继续完成事务提交。