看似简单但很复杂的经典网络问题
看似简单但很复杂的经典网络问题
假设有个ATM终端T和一台中央主机H。
T接受用户存钱,然后通知H;H将存钱信息更新到数据库。
但是网络并不是100%可靠。如果网络不正常,H没有写入,T需要将钱退还给用户。
请问如何做?
网络不正常的含义是,任何传输过程都可能丢失数据,包括确认信息。
[解决办法]
尽量让受损方发生在用户端(没有H主机确认的情况下允许ATM吃钱,但不允许ATM吐钱)
[解决办法]
问问中央银行的人
[解决办法]
双向确认。
[解决办法]
[解决办法]
1)扫描存入现金
2)向H发送存钱操作。如果发送不成功,提示失败、退钱,结束。
3)收到确认信息,提示成功,结束。
如果没有收到确认信息,不退钱、提示联系工作人员。
[解决办法]
在延时一定时间后如果T没有收到H返回的确认信息就退款
[解决办法]
三次握手
[解决办法]
原子操作(H写入,T收钱)
一起成功,一起失败!
[解决办法]
从理论上不可行。
互锁。
[解决办法]