想象一下,我们有 2 个执行汇款的节点。节点 A 发起从一个账户到另一个账户的转账,节点 B 负责完成这笔交易。因此,要完成此交易,节点 A 必须向节点 B 发送一些 TRANSFER 请求,并且在成功时节点 B 必须以确认 TRANSFER 请求来响应。我看到的可能问题如下:收到 TRANSFER 请求后,节点 B 执行了事务,但未能发送响应。所以节点A认为请求失败并报告问题,但事务实际上已经完成。
即使考虑两阶段提交协议(节点 B 在收到 TRANSFER 请求时不提交事务,而只是执行它并等待节点 A 的一些提交确认)也可能存在类似的问题:当节点 A 发送 TRANSFER 提交请求时无法确定节点 B 收到了该请求并且事务实际上已完成(即使该请求已传递到目标主机,我们也无法确定它是由某个进程提交的)。
如何解决这个问题或者它真的是一个问题?