Существует также 3PC " 3 Phase Commit Protocol ".3PC решает некоторые проблемы 2PC, имея дополнительную фазу, называемую pre-commit.Участник транзакции получает сообщение о предварительной фиксации, чтобы узнать, что все остальные участники согласились зафиксировать, но еще не сделали этого.Эта фаза устраняет неопределенность 2PC, когда все участники ждут сообщения о фиксации или прерывании от координатора.
AFAIK - большинство баз данных прекрасно работают с протоколом 2PC, потому что в маловероятных условиях, что он не работает,у них всегда есть журналы транзакций, чтобы отменить / повторить операции и оставить данные в согласованном состоянии.
Большая часть этого материала очень хорошо обсуждается в
"Database Solutions, второе издание"
и
" Системы баз данных: полная книга "
Еще в распределенном мире вы можете захотеть проверить текущее состояниеТехнология веб-сервиса для распределенных транзакций и рабочих процессов .Не моя чашка чая, если честно.Существуют платформы для Python, Java и .Net для запуска такого рода сервисов ( пример ).
Как и мой прошлогодний проект, несколько лет назад я реализовал распределенный протокол 2PC наtop of Web Services, и я смог запустить транзакции в двух отдельных базах данных, как в примере, который вы привели.Тем не менее, я уверен, что сегодня люди реализуют это в наиболее спокойной манере, например, см. Здесь .Несмотря на то, что в этих ссылках упоминаются некоторые другие протоколы, в конце концов все они реализуют 2PC.
В итоге, реализация протокола 2PC с соответствующими журналами операций для отмены / восстановления в случае сбоя - однаиз наиболее разумных вариантов для.