Второй общий подход к реализации механизма транзакций называется списком намерений. Этот метод заключается в том, что модифицируются самые файлы, а не их копии, но перед изменением любого блока ведется запись в специальный файл - газета регистрации, где отмечается, которая транзакция делает изменения, который файл и блок меняется и которые старое и новое значения изменяемого блока. Только после успешной записи у газету регистрации делаются изменения в исходном файле. Если транзакция фиксируется, то и об этом делается запись в газету регистрации, но старые значения измененных данных хранятся. Если транзакция перерывается, то информация газеты регистрации используется для приведения файла в исходное состояние, и это действие называется откатом.

В распределенных системах фиксация транзакций может возжелать взаимодействия нескольких процессов на разных машинах, каждая с который бережет некоторые переменные, файлы, базы данных. Для достижения свойства неделимости транзакций в распределенных системах используется специальный протокол, называемый протоколом двухфазной фиксации транзакций. Хотя он и не является единым протоколом такого рода, но он более всего широко используется.

Суть этого протокола составляется в такому. Один из процессов выполняет функции координатора (рисунок 3.8). Координатор начинает транзакцию, делая запись об этом в своей газете регистрации, потом он посылает всем подчиненным процессам, также исполняющим эту транзакцию, сообщение "подготовиться к фиксации". Когда подчиненные процессы получают это сообщение, то они проверяют, готовые ли они к фиксации, делают запись в своей газете и посылают координатору сообщения-ответ "готовая к фиксации". После этого подчиненные процессы остаются в состоянии готовности и ждут от координатора команду фиксации. Если хотя бы один из подчиненных процессов не откликнулся, то координатор откатывает подчиненные транзакции, включая и те, что подготовились к фиксации.

Выполнение второй фазы заключается в том, что координатор посылает команду "фиксировать" (commit) всем подчиненным процессам. Выполняя эту команду, последние фиксируют изменения и завершают подчиненные транзакции. В результате гарантируется одновременное синхронное завершение (удачное или неудачное) распределенной транзакции.

Рис. 3.8.  Двухфазный протокол фиксации транзакции

 

Возможно стоит прочитать: