Я разговаривал с парнем, который использовал банкомат в случае его сбоя (очевидно, он работал под управлением Windows XP) и забрал его деньги.
Транзакционная база данных с журналированием с опережением записи может гарантировать, что ваша база данныхостается в согласованном состоянии, даже если банкомат выходит из строя (т.е. вы всегда будете знать, сколько денег должно быть в банкомате и на счете клиента).Однако выдача наличных - это не просто транзакция в БД и не мгновенная операция, поэтому следует ли совершать транзакцию до или после выдачи наличных?В обоих случаях банк или клиент могут потерять деньги, если банкомат выйдет из строя в нужное время.
Существуют ли идеальные (или хотя бы достаточно совершенные) решения этой проблемы?
Один из способов, который я могу себе представить, заключается в том, если бы банкомат имел возможность подсчитывать количество денег в нем.Если банкомат сначала совершил транзакцию, а затем выдал наличные деньги, то после восстановления после сбоя банкомат мог немедленно выдать любые дополнительные деньги сверх того, что он должен содержать, в соответствии с гарантированной согласованной базой данных.
Но из аппаратного обеспеченияточка зрения, я не знаю, будет ли это реально осуществимо.
Что ты думаешь?Есть ли другие способы решения этой проблемы?