В компьютерных сетях и базах данных трехфазный протокол фиксации ( 3PC ) [1] представляет собой распределенный алгоритм , который позволяет всем узлам распределенной системы согласиться на фиксацию транзакции . Это более отказоустойчивое усовершенствование двухфазного протокола фиксации (2PC) .
Двухфазный протокол фиксации не может надежно восстановиться после сбоя как координатора, так и члена когорты во время фазы фиксации . Если бы только координатор вышел из строя, и ни один из членов когорты не получил сообщение о фиксации, можно было бы с уверенностью сделать вывод, что фиксации не произошло. Однако если бы и координатор, и член когорты вышли из строя, возможно, что первым был уведомлен сбойный член когорты, и фактически выполнил фиксацию. Даже если выбран новый координатор, он не может уверенно продолжить операцию, пока не получит согласие от всех членов когорты, и, следовательно, должен заблокировать ее, пока все члены когорты не ответят.
Трехфазный протокол фиксации устраняет эту проблему, вводя состояние Prepared to commit. Если координатор терпит неудачу до отправки сообщений preCommit, группа единогласно согласится, что операция была прервана. Координатор не отправит сообщение doCommit, пока все члены группы не подтвердят ACK , что они Prepared to commit . Это исключает возможность того, что какой-либо член группы фактически завершил транзакцию до того, как все члены группы узнали о решении сделать это (неопределенность, которая потребовала неопределенной блокировки в двухфазном протоколе фиксации ).
Фаза предварительной фиксации, представленная выше, помогает системе восстанавливаться, когда участник или и координатор, и участник выходят из строя во время фазы фиксации. Когда координатор восстановления берет на себя управление после того, как координатор вышел из строя во время фазы фиксации двухфазной фиксации , новая предварительная фиксация оказывается полезной следующим образом: при запросе участников, если он узнает, что некоторые узлы находятся в фазе фиксации, то он предполагает, что предыдущий координатор до сбоя принял решение о фиксации. Следовательно, он может направлять протокол к фиксации. Аналогично, если участник говорит, что он не получил сообщение PrepareToCommit, то новый координатор может предположить, что предыдущий координатор вышел из строя еще до того, как он завершил фазу PrepareToCommit. Следовательно, он может безопасно предположить, что ни один из участников не зафиксировал изменения, и, следовательно, безопасно прервать транзакцию.
Используя оригинальный трехфазный протокол фиксации Скина, возможно, что кворум станет подключенным, не имея возможности двигаться вперед (это не тупиковая ситуация; система все равно будет двигаться вперед, если будет разрешено разделение сети). E3PC Кейдара и Долева [2] совершенствует трехфазный протокол фиксации Скина и решает эту проблему таким образом, что всегда позволяет кворуму двигаться вперед.
Трехфазная фиксация предполагает сеть с ограниченной задержкой и узлы с ограниченным временем отклика; в большинстве практических систем с неограниченной задержкой сети и паузами процесса она не может гарантировать атомарность. Другим недостатком протокола является то, что для его завершения требуется не менее трех циклов, требующих как минимум трех циклов (RTT). Это потенциально длительная задержка для завершения каждой транзакции.