持久的网络通信困境

时间:2014-08-22 04:40:06

标签: networking durability

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

client withdrawn physical amount of money
<=>
account balance updated accordingly

让我们检查几个场景:

  • ATM发送请求,银行发送确认。确认丢失,银行更新帐户,但客户无法获得资金。
  • (如果银行等待ATM确认更新余额)ATM发送请求,银行发送确认,ATM发送确认接收。阿克迷路了。 ATM发了钱,但银行从未更新过帐户。

所以我从来没有能够创建一个解决方案,因为失败的网络不会阻止资金在任何一方丢失。

请建议。

1 个答案:

答案 0 :(得分:1)

实际上,如果我没有误解你的问题,你可能会谈论Long Wait algorithm

在您的第一步中 - 我建议您等到ATM没有收到(确认)确认,反之亦然。在这种情况下,这是唯一可行的解​​决方案。在这种情况下,您设置一个最小的固定时间限制,如果没有收到确认,您再次以n时间单位(最短时间)的定期间隔从银行请求相同的时间用于通过ATM检查银行确认的单元。如果它反复失败,这意味着代码OR概念有问题。

此外,请使用Redo Log Buffer的概念,因为这些是存储和更新银行余额的最佳选择!不要只保留一份副本,而是保留两到三份帐户信息,并在临时副本和only update the final account info in redo log once the acknowledgement from the ATM is received to the bank or the vice-versa中进行更改!介意在重做日志中更新值之前收到确认!