Распределенная СУБД - протоколы фиксации
В локальной системе баз данных для фиксации транзакции диспетчер транзакций должен только передать решение о фиксации диспетчеру восстановления. Однако в распределенной системе диспетчер транзакций должен передать решение о фиксации на все серверы на различных сайтах, где выполняется транзакция, и единообразно обеспечить выполнение этого решения. Когда обработка завершена на каждом сайте, он достигает состояния частично подтвержденной транзакции и ждет, пока все другие транзакции достигнут своего частично подтвержденного состояния. Когда он получает сообщение о том, что все сайты готовы к фиксации, он начинает фиксацию. В распределенной системе фиксируются либо все сайты, либо ни один из них.
Различные протоколы распределенной фиксации:
- Одноэтапная фиксация
- Двухфазная фиксация
- Трехфазная фиксация
Распределенная однофазная фиксация
Распределенная однофазная фиксация - это самый простой протокол фиксации. Предположим, что есть контролирующий сайт и несколько подчиненных сайтов, на которых выполняется транзакция. Шаги в распределенной фиксации:
После того, как каждое ведомое устройство локально завершило свою транзакцию, оно отправляет сообщение «DONE» на контролирующий сайт.
Подчиненные устройства ждут сообщения «Фиксация» или «Прервать» от контролирующего сайта. Это время ожидания называетсяwindow of vulnerability.
Когда контролирующий сайт получает сообщение «DONE» от каждого ведомого устройства, он принимает решение о фиксации или отмене. Это называется точкой фиксации. Затем он отправляет это сообщение всем ведомым устройствам.
Получив это сообщение, подчиненное устройство либо фиксирует, либо прерывает работу, а затем отправляет сообщение подтверждения на контролирующий сайт.
Распределенная двухфазная фиксация
Распределенная двухфазная фиксация снижает уязвимость протоколов однофазной фиксации. Шаги, выполняемые на двух этапах, следующие:
Phase 1: Prepare Phase
После того, как каждое ведомое устройство локально завершило свою транзакцию, оно отправляет сообщение «DONE» на контролирующий сайт. Когда контролирующий сайт получил сообщение «ГОТОВО» от всех подчиненных, он отправляет подчиненным сообщение «Подготовить».
Рабы голосуют за то, хотят ли они продолжать или нет. Если ведомое устройство хочет выполнить фиксацию, оно отправляет сообщение «Готово».
Подчиненное устройство, которое не хочет выполнять фиксацию, отправляет сообщение «Не готов». Это может произойти, когда ведомое устройство имеет конфликтующие одновременные транзакции или истекло время ожидания.
Phase 2: Commit/Abort Phase
После того, как контролирующий сайт получил сообщение «Готово» от всех подчиненных -
Управляющий сайт отправляет подчиненным сообщение «Global Commit».
Подчиненные устройства применяют транзакцию и отправляют сообщение «Подтвердить подтверждение» контролирующему сайту.
Когда контролирующий сайт получает сообщение «Подтвердить ACK» от всех ведомых устройств, он считает транзакцию подтвержденной.
После того, как контролирующий сайт получил первое сообщение «Не готов» от любого ведомого устройства -
Управляющий сайт отправляет подчиненным сообщение «Global Abort».
Подчиненные устройства прерывают транзакцию и отправляют сообщение «Abort ACK» на контролирующий сайт.
Когда контролирующий сайт получает сообщение «Abort ACK» от всех ведомых устройств, он считает транзакцию прерванной.
Распределенная трехфазная фиксация
Шаги в распределенной трехфазной фиксации следующие:
Phase 1: Prepare Phase
Шаги такие же, как при распределенной двухфазной фиксации.
Phase 2: Prepare to Commit Phase
- Управляющий сайт выдает широковещательное сообщение «Войдите в подготовленное состояние».
- Подчиненные сайты голосуют в ответ «ОК».
Phase 3: Commit / Abort Phase
Шаги такие же, как и при двухфазной фиксации, за исключением того, что сообщение «Подтвердить ACK» / «Прервать ACK» не требуется.