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