Как сохранить мобильный телефон и сервер в синхронизации c во время транзакции? - PullRequest
1 голос
/ 17 апреля 2020

Я совершаю транзакцию в базу данных. Если клиент теряет соединение Wi-Fi во время транзакции, но после фиксации, он не будет знать, что транзакция завершена. Проблема заключается в том, что сервер должен фиксировать транзакцию на постоянной основе, только если мобильное приложение соглашается, и сервер знает, что 1) мобильное приложение согласилось, а также 2) мобильное приложение знает, что транзакция была завершена. Казалось бы, решение состоит в том, чтобы мобильное приложение отправляло сообщение с подтверждением, что оно подтвердило транзакцию, но что, если проблема с отключением возникает после получения подтверждения на сервере, но до того, как сервер отправит 200 обратно? Теперь сервер думает, что мобильное приложение знает, но мобильное приложение не знает наверняка, что сервер получил это сообщение. Это почти похоже на рукопожатие какого-то типа, потому что обе стороны должны знать, что на каждой стороне. Проблема заключается в том, как обрабатывать транзакции в ненадежных сетях, где сервер должен знать, что клиент принимает транзакцию и знает, что транзакция завершена, прежде чем сделать транзакцию постоянной.

1 Ответ

1 голос
/ 17 апреля 2020

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

В практической жизни вы будете нужно выбрать, какой риск вы принимаете. На сообщениях с низким уровнем риска, таких как друзья, согласившиеся встретиться друг с другом, обычно достаточно одного подтверждающего ответа, чтобы продолжить, несмотря на вероятность того, что ответ так и не был получен. Теперь подумайте об оплате через GPRS ED C. Всегда существует вероятность того, что соединение прервалось сразу после полной доставки инструкции по оплате и не вернется до того, как клиент решит уйти. Без распечатанного квитанции о подтверждении, магазин обычно рассматривает платеж как никогда не выполненный, а только возвращает транзакцию позже. И магазин, и покупатель принимают этот риск.

Сообщение «Ваша кофейня не использует двухфазную фиксацию» действительно хорошее прочтение при разработке вашей системы. Рассмотрим требования. Откат недопустим? Есть ли определенный уровень несоответствия, который терпим или даже ожидается? Возможно, вы даже можете уменьшить роль клиента, чтобы просто попытаться отправить команду и затем выполнить обратное чтение с сервера, отбрасывая его собственную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...