Теоретически, можно ли определить протокол, в котором одна машина выполняет несколько удаленных вызовов на другой машине (или более чем на одной) и где в любой части процесса происходит сбой какой-либо из машин (или операций) или происходит обмен данными падает, все откатывается? (как базы данных могут)
Я спрашиваю об этом, поскольку на аппаратном уровне всегда говорят, что нельзя выполнять атомарные операции (очень важный компонент транзакций) без атомарной операции процессора (тестирование и настройка).
Но так как сейчас мы говорим о нескольких машинах, это не летает.
В качестве примера, как это было бы сложно: скажем, у меня есть протокол для выдачи команды на удаленной машине и получения ответа обратно. Может случиться так, что метод вызывается, но во время передачи ответа соединение разрывается. Тогда вполне может быть, что машина, которая выполнила операцию, думает, что все в порядке, но принимающая машина так и не получила ответа.
Добавление Ack's не помогает, так как также Ack может быть потеряно при транспортировке.
Заинтересованный, чтобы прочитать мысли других (и узнать, что какой-то профессор 27 лет назад, вероятно, уже придумал твердое твердое решение).
R