Прочная сетевая коммуникационная дилемма

Давайте представим, что у нас есть банк и банкомат. Они общаются по сети, что может привести к сбою. Можно ли создать сценарий, где связь между ними на 100% прочна. В данном случае это означает, что:

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

Давайте проверим пару сценариев:

  • Банкомат отправляет запросы, банк отправляет подтверждение. Подтверждение потеряно, банковский счет обновлен, но у клиента нет денег.
  • (если банк ожидает подтверждения от банкомата для обновления баланса) Банкомат отправляет запросы, банк отправляет подтверждение, банкомат отправляет подтверждение на прием. Ак потерялся. Банкомат выдал деньги, но банк так и не обновил счет.

Поэтому я никогда не мог создать решение, в котором отказ сети не помешал бы потерям денег с обеих сторон.

Пожалуйста, порекомендуйте.

1 ответ

На самом деле, если я не неправильно понимаю ваш вопрос, вы, вероятно, говорите о Long Wait algorithm,

На первом этапе --- я бы посоветовал вам подождать, пока подтверждение не будет получено (подтверждено) банкоматом или наоборот. Это единственное жизнеспособное решение в этом случае. В этом случае вы устанавливаете минимальный фиксированный срок, после которого, если подтверждение не получено, вы снова запрашиваете его в банке через каждый регулярный интервал времени. n единица времени (минимальная единица времени для проверки подтверждения от банка банкоматом). Если это постоянно терпит неудачу, это означает, что что-то не так с концепцией кода ИЛИ.

Кроме того, используйте концепцию 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! Не забудьте получить подтверждение перед обновлением значений в журнале повторов!

Другие вопросы по тегам