Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Митряев лекции / РИС гр.446зс 2015 / РИС Л.11. гр.445 11.11.1ё5.docx
Скачиваний:
214
Добавлен:
25.03.2016
Размер:
299.56 Кб
Скачать

4.8.2. Двухфазный протокол утверждения

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

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

Хотя этот протокол и не является единственным протоколом такого рода, но он наиболее широко используется.

Двухфазный протокол утверждения важен в тех случаях, когда транзакция может взаимодействовать с несколькими независимыми администраторами ресурсов:

каждый из них руководит своим собственным набором восстанавливаемых ресурсов и поддерживает собственный файл регистрации.

для транзакции не имеет смысла выполнять оператор завершения отдельно для каждого из администраторов ресурсов. Вместо этого должна быть выполнена единая общесистемная команда END_TRANSACTION или ABORT_TRANSACTION.

Суть двухфазного протокола утверждения состоит в следующем:

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

  • Пусть транзакция успешно завершена и ее нужно утвердить. Координатор осуществляет двухфазный процесс.

    • Координатор записывает в протокол "транзакция готова к утверждению". Координируемые процессы, получив сообщение, записывают в свой протокол "готов к транзакции" и отсылают координатору сообщение "готов". Координатор в конце первой фазы собирает все сообщения о готовности.

    • Когда все ответы собраны, координатор записывает в протокол "транзакция утверждена" и рассылает всем процессам сообщение "транзакция утверждена". Координируемые процессы, получив сообщение, записывают в свой протокол "транзакция утверждена" и отсылают координатору "готов". Если все ответы во время первой фазы собрать не удалось или хотя бы один из ответов содержит отказ от транзакции, то координатор дает команду ABORT_TRANSACTION.

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