面试题答案
一键面试准备阶段(第一阶段)
- 协调者故障:
- 参与者会等待协调者的指令超时。若超时,参与者通常会回滚事务。因为没有协调者的进一步指示,参与者无法确定事务最终的提交状态,为保证数据一致性,选择回滚是较为安全的策略。
- 参与者故障:
- 如果某个参与者在准备阶段故障,协调者在等待超时后,会向其他正常的参与者发送回滚指令。因为只要有一个参与者无法成功准备,整个事务就不具备提交的条件,所以通过回滚来确保数据一致性。
提交阶段(第二阶段)
- 协调者故障:
- 对于已经收到提交指令的参与者,它们会继续提交事务并完成操作。因为它们已经接收到了协调者的最终提交指示,所以按照指示完成事务提交。
- 对于没有收到提交指令的参与者,它们会等待协调者恢复。协调者恢复后,会重新向这些未收到提交指令的参与者发送提交指令,以确保所有参与者的事务状态一致。
- 参与者故障:
- 如果在提交阶段某个参与者故障,对于已经提交的参与者,事务状态已不可更改。而对于故障的参与者,待其恢复后,协调者会根据事务日志等机制,确保故障参与者能正确完成事务提交或回滚(如果其他参与者回滚了事务)。如果其他参与者都成功提交,协调者会指示故障恢复的参与者提交事务;如果其他参与者回滚,协调者会指示故障恢复的参与者回滚事务。