Распределенная СУБД - протоколы коммитов

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

Различные протоколы распределенной фиксации:

  • Однофазный коммит
  • Двухфазный коммит
  • Трехфазный коммит

Распределенная однофазная фиксация

Распределенная однофазная фиксация - это самый простой протокол фиксации. Давайте рассмотрим, что есть контролирующий сайт и несколько подчиненных сайтов, где выполняется транзакция. Шаги в распределенном коммите:

  • После того, как каждое ведомое устройство локально завершило свою транзакцию, оно отправляет сообщение «ГОТОВО» на контролирующий сайт.

  • Подчиненные ожидают сообщения «Подтвердить» или «Прервать» с контролирующего сайта. Это время ожидания называется окном уязвимости .

  • Когда контролирующий сайт получает сообщение «ГОТОВО» от каждого ведомого, он принимает решение о фиксации или отмене. Это называется точкой фиксации. Затем он отправляет это сообщение всем рабам.

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

Распределенная двухфазная фиксация

Распределенная двухфазная фиксация снижает уязвимость однофазных протоколов фиксации. Шаги, выполняемые на двух этапах:

Этап 1: подготовить этап

  • После того, как каждое ведомое устройство локально завершило свою транзакцию, оно отправляет сообщение «ГОТОВО» на контролирующий сайт. Когда контролирующий сайт получил сообщение «ГОТОВО» от всех подчиненных, он отправляет сообщение «Подготовить» подчиненным.

  • Рабы голосуют за то, хотят ли они по-прежнему совершать или нет. Если ведомый хочет зафиксировать, он отправляет сообщение «Готово».

  • Раб, который не хочет коммитить, отправляет сообщение «Не готов». Это может произойти, если ведомое устройство имеет конфликтующие параллельные транзакции или истекло время ожидания.

Этап 2: Фиксация / Отмена

  • После того, как контролирующий сайт получил сообщение «Готово» от всех ведомых -

    • Контролирующий сайт отправляет сообщение «Global Commit» подчиненным.

    • Подчиненные устройства применяют транзакцию и отправляют сообщение «Подтвердить ACK» на контролирующий сайт.

    • Когда контролирующий сайт получает сообщение «Подтвердить ACK» от всех ведомых устройств, он считает транзакцию подтвержденной.

  • После того, как контролирующий сайт получил первое сообщение «Не готов» от любого ведомого -

    • Контролирующий сайт отправляет сообщение «Global Abort» подчиненным.

    • Слэйвы отменяют транзакцию и отправляют сообщение «Abort ACK» на контролирующий сайт.

    • Когда контролирующий сайт получает сообщение «Abort ACK» от всех ведомых устройств, он считает транзакцию отмененной.

Распределенный трехфазный коммит

Шаги в распределенной трехфазной фиксации следующие:

Этап 1: подготовить этап

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

Фаза 2: Подготовьтесь к Фиксации Фазы

  • Контролирующий сайт выдает широковещательное сообщение «Ввод подготовленного состояния».
  • Ведомые сайты голосуют «ОК» в ответ.

Этап 3: Фиксация / Отмена

Этапы аналогичны двухфазной фиксации, за исключением того, что сообщение «Подтвердить ACK» / «Прервать ACK» не требуется.