在 2 Phase Commit 中,在所有参与事务的组件都投票“是”之后,事务协调器发出“提交”命令。然后每个参与者提交自己的事务。
如果任何参与者在“提交”步骤失败会发生什么?虽然这个组件失败了,但其他组件可能已经提交了他们的事务。如果发生这种情况,事务协调器是否能够向所有参与者发出回滚命令。
谢谢。
在 2 Phase Commit 中,在所有参与事务的组件都投票“是”之后,事务协调器发出“提交”命令。然后每个参与者提交自己的事务。
如果任何参与者在“提交”步骤失败会发生什么?虽然这个组件失败了,但其他组件可能已经提交了他们的事务。如果发生这种情况,事务协调器是否能够向所有参与者发出回滚命令。
谢谢。
第一阶段的全部目的是确保在提交阶段没有任何失败。至少由于数据完整性或业务流程的观点。因此,如果提交的准备阶段很好,那么可以假设提交将起作用,但网络/通信失败除外。
所有参与系统必须就处理情况的一种或另一种方式达成一致
1.自动提交。如果协调器没有显式调用回滚,(在给定时间内)事务将被视为由相应的参与系统提交。
2.Transaction Coordinator 为每个失败的组件重试。在网络故障的情况下,重试可能仍然有效。
3.补偿。在指定次数的重试之后,事务协调器假定事务已经以不一致的状态结束。然后它可以尝试补偿。(注意:这不一定是回滚,这就像事务失败时要采取的行动)。
现在想想这个。补偿本身可能不会在所有资源管理器中都成功。
一些业务流程可能也需要人工补偿!因此,您需要记录、发出警报,并且可能需要手动补偿才能使系统恢复到原始状态。