0

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

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

让我们检查几个场景:

  • ATM 发送请求,银行发送确认。确认丢失,银行更新帐户但客户没有收到钱。
  • (如果银行等待 ATM 的确认以更新余额) ATM 发送请求,银行发送确认,ATM 发送 ack 接收。阿克迷路了。ATM 发钱,但银行从未更新帐户。

所以我永远无法创建一个解决方案,其中失败的网络不会阻止资金在任何一方丢失。

请指教。

4

1 回答 1

1

实际上,如果我没有误解您的问题,您可能正在谈论Long Wait algorithm.

在您的第一步中---我建议您等到 ATM 没有收到(确认)确认,反之亦然。在这种情况下,这是唯一可行的解​​决方案。在这种情况下,您设置了一个最小的固定时限,在此之后如果没有收到回执,您将在每个固定的时间间隔内再次向银行请求相同的n时间单位(检查银行回执的最小时间单位自动柜员机)。如果它反复失败,这意味着代码 OR 概念有问题。

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

于 2014-08-22T08:51:45.180 回答