Networking 持久的网络通信困境

Networking 持久的网络通信困境,networking,durability,Networking,Durability,让我们想象一下,我们有一家银行和一台自动取款机。它们通过网络进行通信,这可能会失败。是否可以创建一个场景,其中它们之间的通信是100%持久的。在这种情况下,它意味着: client withdrawn physical amount of money <=> account balance updated accordingly 客户提取的实际金额 账户余额相应更新 让我们检查两个场景: ATM发送请求,银行发送确认。确认书丢失,银行更新了账户,但客户还没有拿到钱 (若银行等待

让我们想象一下,我们有一家银行和一台自动取款机。它们通过网络进行通信,这可能会失败。是否可以创建一个场景,其中它们之间的通信是100%持久的。在这种情况下,它意味着:

client withdrawn physical amount of money
<=>
account balance updated accordingly
客户提取的实际金额
账户余额相应更新
让我们检查两个场景:

  • ATM发送请求,银行发送确认。确认书丢失,银行更新了账户,但客户还没有拿到钱
  • (若银行等待ATM确认以更新余额)ATM发送请求,银行发送确认,ATM发送ack接收。艾克迷路了。自动柜员机发行了货币,但银行从未更新过账户
所以,我永远无法创造一个解决方案,在这个方案中,失败的网络不会阻止资金在任何一方流失


请告知。

事实上,如果我没有误解你的问题,你可能在谈论
长等待算法

在您的第一步中,我建议您等到ATM机没有收到(确认)确认,或者ATM机没有收到(确认)确认。在这种情况下,这是唯一可行的解决办法。在这种情况下,您设置了一个最小固定时限,在此时限之后,如果未收到确认,您将在
n
时间单位(ATM检查银行确认的最小时间单位)的每个定期间隔再次向银行请求相同的时间。如果反复失败,这意味着代码或概念有问题

此外,请务必使用的概念,因为这些是存储和更新银行余额的最佳选择!!!不要只保留一份副本,而是两到三份帐户信息副本,并在临时副本中进行更改,
仅在银行收到ATM确认后更新重做日志中的最终帐户信息,反之亦然
!请注意在更新重做日志中的值之前收到确认