
- •Распределённые алгоритмы План
- •1. Распределенные системы. Архитектура и функционирование
- •1.1. Поддержка Языка
- •Параллелизм.
- •2. Распределенные Алгоритмы
- •Распределенные алгоритмы против Централизованных алгоритмов
- •Пример: Связь с одиночным сообщением
- •3. Балансировка нагрузки в распределенных системах
- •Выборы координатора
- •4.7. Механизмы обеспечения синхронизации
- •Низкоуровневые средства синхронизации
- •4.8. Атомарные транзакции
- •4.8.2. Двухфазный протокол утверждения
- •5. Тупики в распределенных системах
4.8.2. Двухфазный протокол утверждения
В распределенных системах фиксация транзакций может потребовать взаимодействия нескольких процессов на разных машинах, каждая из которых хранит некоторые переменные, файлы, базы данных.
Для достижения свойства неделимости транзакций в распределенных системах используется специальный протокол, называемый протоколом двухфазной фиксации транзакций или двухфазным протоколом утверждения
Хотя этот протокол и не является единственным протоколом такого рода, но он наиболее широко используется.
Двухфазный протокол утверждения важен в тех случаях, когда транзакция может взаимодействовать с несколькими независимыми администраторами ресурсов:
каждый из них руководит своим собственным набором восстанавливаемых ресурсов и поддерживает собственный файл регистрации.
для транзакции не имеет смысла выполнять оператор завершения отдельно для каждого из администраторов ресурсов. Вместо этого должна быть выполнена единая общесистемная команда END_TRANSACTION или ABORT_TRANSACTION.
Суть двухфазного протокола утверждения состоит в следующем:
Один из процессов выполняет функции координатора (рисунок 4 ). Координатор начинает транзакцию, делая запись об этом в своем журнале регистрации, затем он посылает всем подчиненным процессам, также выполняющим эту транзакцию, сообщение "подготовиться к фиксации". Когда подчиненные процессы получают это сообщение, то они проверяют, готовы ли они к фиксации, делают запись в своем журнале и посылают координатору сообщение-ответ "готов к фиксации". После этого подчиненные процессы остаются в состоянии готовности и ждут от координатора команду фиксации. Если хотя бы один из подчиненных процессов не откликнулся, то координатор откатывает подчиненные транзакции, включая и те, которые подготовились к фиксации. Выполнение второй фазы заключается в том, что координатор посылает команду "фиксировать" (commit) всем подчиненным процессам. Выполняя эту команду, последние фиксируют изменения и завершают подчиненные транзакции. В результате гарантируется одновременное синхронное завершение (удачное или неудачное) распределенной транзакции. Пример алгоритма работы координатора.
Пусть транзакция успешно завершена и ее нужно утвердить. Координатор осуществляет двухфазный процесс.
Координатор записывает в протокол "транзакция готова к утверждению". Координируемые процессы, получив сообщение, записывают в свой протокол "готов к транзакции" и отсылают координатору сообщение "готов". Координатор в конце первой фазы собирает все сообщения о готовности.
Когда все ответы собраны, координатор записывает в протокол "транзакция утверждена" и рассылает всем процессам сообщение "транзакция утверждена". Координируемые процессы, получив сообщение, записывают в свой протокол "транзакция утверждена" и отсылают координатору "готов". Если все ответы во время первой фазы собрать не удалось или хотя бы один из ответов содержит отказ от транзакции, то координатор дает команду ABORT_TRANSACTION.
Рис. 4. Двухфазный протокол
фиксации транзакции