Протокол трехфазной фиксации
В компьютерных сетях и базах данных используется протокол трехфазной фиксации ( 3PC ). [1] это распределенный алгоритм , который позволяет всем узлам распределенной системы согласиться совершить транзакцию — . Это более устойчивая к сбоям модификация протокола двухфазной фиксации (2PC).
Мотивация
[ редактировать ]Протокол двухфазной фиксации не может надежно восстановиться после сбоя как координатора, так и члена группы во время фазы фиксации . Если бы произошел сбой только у координатора и ни один из членов когорты не получил сообщение о фиксации, можно было бы с уверенностью сделать вывод, что никакой фиксации не произошло. Однако если и координатор, и член группы потерпели неудачу, возможно, что неудавшийся член группы был первым, кто был уведомлен и действительно выполнил фиксацию. Даже если будет выбран новый координатор, он не сможет уверенно приступить к операции, пока не получит согласие от всех членов когорты, и, следовательно, должен блокировать операцию до тех пор, пока все члены когорты не ответят.
Протокол трехфазной фиксации устраняет эту проблему, вводя состояние «Подготовлено к фиксации». Если координатор потерпит неудачу до отправки сообщений preCommit, группа единогласно согласится, что операция была прервана. Координатор не будет отправлять сообщение doCommit до тех пор, пока все члены группы не подтвердят , что они готовы к совершению действия . Это исключает возможность того, что какой-либо член когорты фактически завершил транзакцию до того, как все члены когорты узнали о решении сделать это (двусмысленность, которая потребовала неопределенной блокировки в протоколе двухфазной фиксации ).
Решение
[ редактировать ]Фаза предварительной фиксации, представленная выше, помогает системе восстановиться, если участник или координатор и участник потерпели неудачу на этапе фиксации. Когда координатор восстановления берет на себя управление после того, как координатор потерпел неудачу во время фазы фиксации двухфазной фиксации , новая предварительная фиксация становится удобной следующим образом: при опросе участников, если он узнает, что некоторые узлы находятся в фазе фиксации, он предполагает, что предыдущая фиксация координатор перед сбоем принял решение о фиксации. Следовательно, он может управлять протоколом для фиксации. Аналогично, если участник сообщает, что он не получил сообщение ПодготовкаToCommit, то новый координатор может предположить, что предыдущий координатор потерпел неудачу еще до того, как завершил фазу ПодготовкаToCommit. Следовательно, можно с уверенностью предположить, что ни один из участников не зафиксировал изменения, и, следовательно, безопасно прервать транзакцию.
Расширения
[ редактировать ]Используя оригинальный протокол трехфазной фиксации Скина, возможно, что кворум подключится, не имея возможности добиться прогресса (это не тупиковая ситуация; система все равно будет работать, если разделение сети будет разрешено). E3PC Кейдара и Долева [2] совершенствует протокол трехфазной фиксации Скина и решает эту проблему таким образом, чтобы кворум всегда мог добиться прогресса.
Недостатки
[ редактировать ]Трехфазная фиксация предполагает сеть с ограниченной задержкой и узлами с ограниченным временем ответа; В большинстве практических систем с неограниченной сетевой задержкой и паузами процессов это не может гарантировать атомарность. Другим недостатком протокола является то, что для его завершения требуется как минимум три передачи туда и обратно, что требует как минимум трех времен туда и обратно (RTT). Потенциально это может привести к длительной задержке завершения каждой транзакции.
Ссылки
[ редактировать ]- ^ Скин, Дейл (февраль 1982 г.). Протокол фиксации на основе кворума (технический отчет). Департамент компьютерных наук Корнелльского университета.
- ^ Кейдар, Идит ; Дэнни Долев (декабрь 1998 г.). «Повышение устойчивости распределенных и реплицируемых систем баз данных» . Журнал компьютерных и системных наук . 57 (3): 309–324. дои : 10.1006/jcss.1998.1566 .