Введение
Распределенный алгоритм
В компьютерных сетях и базах данных, трехфазный протокол коммита (3PC) — это распределенный алгоритм, позволяющий всем узлам в распределенной системе прийти к согласию о выполнении транзакции. Он является более отказоустойчивой версией двухфазного протокола коммита (2PC).
In computer networking and databases, the three phase commit protocol (3PC) is a distributed algorithm which lets all nodes in a distributed system agree to commit a transaction. It is a more failure resilient refinement of the two phase commit protocol (2PC).
Мотивация
Протокол двухфазной фиксации не может надежно восстановиться после сбоя как координатора, так и участника (члена когорты) во время фазы фиксации. Если бы сбой произошел только у координатора, и ни один участник не получил сообщение о фиксации, можно было бы безопасно заключить, что фиксация не состоялась. Однако, если сбой произошел и у координатора, и у участника, возможно, что сбойный участник был первым, кто был уведомлен, и фактически выполнил фиксацию. Даже если будет выбран новый координатор, он не сможет уверенно продолжить операцию, пока не получит подтверждение от всех участников, и, следовательно, должен блокироваться до тех пор, пока все участники не ответят. Протокол трехфазной фиксации устраняет эту проблему, вводя состояние "подготовленности к фиксации". Если координатор выходит из строя до отправки сообщений preCommit, участники единогласно согласятся с тем, что операция была отменена. Координатор не будет отправлять сообщение doCommit, пока все участники не подтвердят свою готовность к фиксации. Это исключает возможность того, что какой-либо участник фактически завершил транзакцию до того, как все участники узнали о решении о ее завершении (неоднозначность, которая требовала неопределенной блокировки в протоколе двухфазной фиксации).
Решение
Фаза предварительного коммита, описанная выше, помогает системе восстановиться в случае отказа участника или координатора и участника во время фазы коммита. Когда координатор восстановления берет на себя управление после отказа координатора во время фазы коммита в двухфазном коммите, новая фаза предварительного коммита оказывается полезной следующим образом: при опросе участников, если координатор узнает, что некоторые узлы находятся в фазе коммита, он предполагает, что предыдущий координатор, до своего отказа, принял решение о коммите. Таким образом, он может направить протокол к коммиту. Аналогично, если участник сообщает, что не получил сообщение "Подготовка к коммиту", новый координатор может предположить, что предыдущий координатор потерпел отказ еще до завершения фазы "Подготовка к коммиту". Следовательно, он может безопасно предположить, что ни один из участников не зафиксировал изменения, и, соответственно, безопасно отменить транзакцию.
Расширения
Используя оригинальный трехфазный протокол коммита Skeen, возможно, что кворум установит соединение, но не сможет добиться прогресса (это не ситуация взаимной блокировки; система продолжит работу, если разделение сети будет устранено). E3PC, разработанный Кеидаром и Долевом, совершенствует трехфазный протокол коммита Skeen и решает эту проблему, обеспечивая возможность прогресса для кворума в любой ситуации.
Недостатки
Трехфазный коммит предполагает сеть с ограниченной задержкой и узлы с ограниченным временем отклика. Однако в большинстве практических систем с неограниченной сетевой задержкой и паузами в работе процессов он не может гарантировать атомарность. Другой недостаток протокола заключается в том, что для его завершения требуется не менее трех обменов сообщениями, что составляет минимум три времени кругового обхода (RTT). Это может привести к значительной задержке при завершении каждой транзакции.