让我们想象一下,我们有银行和ATM。他们通过网络进行通信,这可能会失败。是否可以创建一个场景,它们之间的通信是100%持久的。在这种情况下,它意味着:
client withdrawn physical amount of money
<=>
account balance updated accordingly
让我们检查几个场景:
所以我从来没有能够创建一个解决方案,因为失败的网络不会阻止资金在任何一方丢失。
请建议。
答案 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
中进行更改!介意在重做日志中更新值之前收到确认!