Транзакционные операции по сети, как?
=======================================

 Собственно, как организовать транзакционную передачу данных по сети?  
  

Банальный пример - операция пополнения счета.   

Сервис А сообщает сервису Б, что пользователь на стороне А пополнил счет. И в этот момент, при успешной операции на Б, по сети теряется ответ для А об успешности операции. Возникает ситуация, что А попытается повторно пополнить счет, т.к. ответ не был получен.  
  

Пока вижу такой вариант, начать операцию по передаче данных, открыв транзакцию с таймаутом на Б.  

При удачном ответе от Б к А, сервис А отправляет запрос на закрытие транзакции Б по данной операции.  

При всех неудачных операциях, транзакция просто закрывается по таймауту.  
  

Подскажите, что гуглить, что почитать? 

 Сервис А сообщает Б, что пользователь пополнил на стороне А счёт, номер этой транзакции такой-то.  

Сервис Б в ответ сообщает, что транзакция обработана, ну или о какой-то ошибке в строгом формате.  

Если сервис А не получает такое сообщение, то через некоторое время отправляет сообщение повторно с тем же самым номером транзакции. Если сервис Б находит такую транзакцию у себя - отвечает, что событие уже обработано. Если не находит - обрабатывает штатно как новую транзакцию.  
  

Сервис А ставит операции статус "выполнено" только после получения ответа от Б, пока ответа нет - служебный статус "обрабатывается" 

 Транзакция проходит на стороне А (платежный агрегатор. пример).  

После проведения операции у себя, он шлет данные к Б.  

Если Б не отвечает, то А ставит отправку данных к Б в очередь и повторяет данную операцию до тех пор, пока не будет получен Ок от Б. 

 Сначала А посылает запрос на создание пустой (непогашенной) транзакции на Б.   

"Б" возвращает в ответе идентификатор транзакции.  

"А" посылает запрос на оплату транзакции с полученным идентификатором.   
  

В случае, если ответ от "Б" не дошел до "А", а операция совершилась, то при повторной попытке оплатить транзакцию "Б" ответит ошибкой "уже оплачно".  

Также такой механизм дает возможность для "А" делать запрос о статусе транзакции на "Б".