Я нечетко понимаю, как работают обычные ACID-транзакции. Вы выполняете некоторую работу с базой данных таким образом, что работа не подтверждается до тех пор, пока не установлен какой-либо флаг фиксации. Часть фиксации основана на некотором базовом предположении (например, запись на единичный диск является атомарной). В случае катастрофической ошибки вы можете просто удалить незафиксированные данные на этапе восстановления.
Как работают распределенные транзакции? В некоторой документации MS я прочитал, что вы можете каким-то образом выполнять транзакции между базами данных и файловыми системами (среди прочего).
Эта технология может быть (и, вероятно, используется) для установщиков, где вы хотите, чтобы программа была полностью установлена или полностью отсутствовала. Вы просто начинаете транзакцию в начале программы установки. Далее вы можете подключиться к реестру и файловой системе, внеся изменения, которые определяют установку. Когда работа завершена, просто подтвердите или откатитесь, если по какой-либо причине установка не удалась. Этот магический координатор распределенных транзакций автоматически очищает реестр и файловую систему.
Как это возможно, что две разные системы могут быть обработаны таким образом? Мне кажется, что всегда можно оставить систему в несогласованном состоянии, когда файловая система зафиксировала свои изменения, а реестр - нет. Я думаю, что в MSDTC даже можно выполнить транзакцию по сети.
Я прочитал http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx,, но похоже, что это только начало объяснения, и этот шаг 4 следует значительно расширить.
Редактировать: Из того, что я собрал на http://en.wikipedia.org/wiki/Distributed_transaction,, это может быть выполнено двухфазным коммитом (http://en.wikipedia.org/wiki/Two-phase_commit). После прочтения этого я все еще не понимаю Метод 100%, кажется, что между шагами есть много места для ошибки.