Протокол двухфазной фиксации - Two-phase commit protocol

В обработке транзакций , баз данных и компьютерных сетей , то двухфазной фиксации протокола ( 2PC ) представляет собой тип атомного протокола обязательств (ACP). Это распределенный алгоритм, который координирует все процессы, участвующие в распределенной атомарной транзакции, в зависимости от того, следует ли зафиксировать или прервать (откат) транзакцию (это специализированный тип протокола консенсуса ). Протокол достигает своей цели даже во многих случаях временного сбоя системы (включая сбои процесса, сетевого узла, связи и т. Д.), Поэтому он широко используется. Однако он не устойчив ко всем возможным конфигурациям сбоя, и в редких случаях для исправления результата требуется ручное вмешательство. Для обеспечения восстановления после сбоя (в большинстве случаев автоматически) участники протокола используют регистрацию состояний протокола. Записи журнала, которые обычно создаются медленно, но переживают сбои, используются процедурами восстановления протокола . Существует множество вариантов протоколов, которые в первую очередь различаются стратегиями ведения журналов и механизмами восстановления. Хотя процедуры восстановления обычно предназначены для нечастого использования, они составляют значительную часть протокола из-за множества возможных сценариев сбоя, которые должны учитываться и поддерживаться протоколом.

При «нормальном выполнении» любой отдельной распределенной транзакции (т. Е. При отсутствии сбоя, что обычно является наиболее частой ситуацией) протокол состоит из двух этапов:

  1. Фаза запроса фиксации (или фаза голосования), на которой процесс координатора пытается подготовить все участвующие в транзакции процессы (названные участники, когорты или рабочие), чтобы предпринять необходимые шаги для фиксации или отмены транзакции и проголосовать, либо «Да»: зафиксировать (если выполнение локальной части участника транзакции завершилось должным образом) или «Нет»: прервать (если была обнаружена проблема с локальной частью), и
  2. Фаза фиксации, на которой на основе голосования участников координатор решает, зафиксировать ли транзакцию (только если все проголосовали «Да») или прервать транзакцию (в противном случае), и сообщает результат всем участникам. Затем участники выполняют необходимые действия (фиксация или прерывание) со своими локальными транзакционными ресурсами (также называемыми восстанавливаемыми ресурсами; например, данными базы данных) и своими соответствующими частями в других выходных данных транзакции (если применимо).

Протокол двухфазной фиксации (2PC) не следует путать с протоколом двухфазной блокировки (2PL), протоколом управления параллелизмом .

Предположения

Протокол работает следующим образом: один узел является назначенным координатором, который является главным сайтом, а остальные узлы в сети назначаются участниками. Протокол предполагает, что на каждом узле имеется стабильное хранилище с журналом упреждающей записи , что ни один из узлов не выходит из строя навсегда, что данные в журнале упреждающей записи никогда не теряются или не повреждаются при сбое и что любые два узла могут связываться с друг с другом. Последнее предположение не является слишком ограничивающим, поскольку сетевое соединение обычно может быть перенаправлено. Первые два предположения намного сильнее; если узел полностью разрушен, данные могут быть потеряны.

Протокол инициируется координатором после достижения последнего шага транзакции. Затем участники отвечают сообщением о соглашении или сообщением об отмене в зависимости от того, была ли транзакция успешно обработана на участнике.

Базовый алгоритм

Фаза запроса фиксации (или голосования)

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

Фаза фиксации (или завершения)

Успех

Если координатор получил сообщение о согласии от всех участников на этапе запроса фиксации:

  1. Координатор отправляет всем участникам сообщение о фиксации.
  2. Каждый участник завершает операцию и снимает все блокировки и ресурсы, удерживаемые во время транзакции.
  3. Каждый участник отправляет подтверждение координатору.
  4. Координатор завершает транзакцию после получения всех подтверждений.

Отказ

Если какой-либо участник голосует против во время фазы запроса фиксации (или истекает тайм-аут координатора):

  1. Координатор отправляет всем участникам сообщение об откате.
  2. Каждый участник отменяет транзакцию, используя журнал отмены, и освобождает ресурсы и блокировки, удерживаемые во время транзакции.
  3. Каждый участник отправляет подтверждение координатору.
  4. Координатор отменяет транзакцию после получения всех подтверждений.

Поток сообщений

Coordinator                                          Participant
                             QUERY TO COMMIT
                 -------------------------------->
                             VOTE YES/NO             prepare*/abort*
                 <-------------------------------
commit*/abort*               COMMIT/ROLLBACK
                 -------------------------------->
                             ACKNOWLEDGMENT          commit*/abort*
                 <--------------------------------  
end

Знак * рядом с типом записи означает, что запись принудительно помещена в стабильное хранилище.

Недостатки

Самым большим недостатком протокола двухфазной фиксации является то, что это протокол блокировки. Если координатор выйдет из строя навсегда, некоторые участники никогда не разрешат свои транзакции: после того, как участник отправил сообщение о соглашении координатору, он будет блокироваться до тех пор, пока не будет получено фиксация или откат.

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

Общая архитектура

Во многих случаях протокол 2PC распространяется в компьютерной сети. Его легко распределить путем реализации нескольких выделенных компонентов 2PC, похожих друг на друга, обычно называемых менеджерами транзакций (TM; также называемыми агентами 2PC или мониторами обработки транзакций), которые выполняют выполнение протокола для каждой транзакции (например, The Open Group '' s X / Открыть XA ). В базах данных, участвующих в распределенной транзакции, участники, как координатор, так и участники, регистрируются для закрытия TM (обычно находящихся на соответствующих узлах сети, что и участники) для завершения этой транзакции с использованием 2PC. Каждая распределенная транзакция имеет специальный набор TM, TM, в которых регистрируются участники транзакции. Лидер, TM координатора, существует для каждой транзакции, чтобы координировать 2PC для нее, обычно TM базы данных координатора. Однако роль координатора может быть передана другому TM по соображениям производительности или надежности. Вместо того, чтобы обмениваться сообщениями 2PC между собой, участники обмениваются сообщениями со своими соответствующими TM. Соответствующие TM взаимодействуют между собой, чтобы выполнить указанную выше схему протокола 2PC, «представляющую» соответствующих участников для завершения этой транзакции. В этой архитектуре протокол полностью распределен (не требует какого-либо компонента центральной обработки или структуры данных) и эффективно масштабируется с увеличением количества сетевых узлов (размера сети).

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

Оптимизация протокола

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

Предполагаемое прерывание и предполагаемое совершение

Предполагаемое прерывание или Предполагаемая фиксация являются обычными такими оптимизациями. Предположение о результате транзакции, будь то фиксация или прерывание, может сохранять как сообщения, так и операции регистрации участников во время выполнения протокола 2PC. Например, в случае предполагаемого прерывания, если во время восстановления системы после сбоя процедура восстановления не обнаруживает зарегистрированных свидетельств фиксации какой-либо транзакции, то предполагается, что транзакция была прервана, и действует соответственно. Это означает, что не имеет значения, регистрируются ли вообще прерывания, и такое ведение журнала может быть сохранено при этом предположении. Обычно при восстановлении после сбоя выплачивается штраф за дополнительные операции, в зависимости от типа оптимизации. Таким образом, по статистике сбоев и исходов транзакций выбирается лучший вариант оптимизации, если таковой имеется.

Протокол двухфазной фиксации дерева

Протокол Tree 2PC (также называемый Nested 2PC или Recursive 2PC) является распространенным вариантом 2PC в компьютерной сети , который лучше использует базовую инфраструктуру связи. Участники распределенной транзакции обычно вызываются в порядке, который определяет древовидную структуру, дерево вызовов, где участники являются узлами, а края - вызовами (связями связи). Это же дерево обычно используется для завершения транзакции по протоколу 2PC, но в принципе для этого может использоваться и другое дерево связи. В дереве 2PC координатор считается корнем («вершиной») дерева связи (инвертированное дерево), а участники - другими узлами. Координатором может быть узел, инициировавший транзакцию (рекурсивно (транзитивно) вызванный другими участниками), но также другой узел в том же дереве может взять на себя роль координатора. Сообщения 2PC от координатора распространяются «вниз» по дереву, в то время как сообщения координатору «собираются» участником от всех участников ниже него, прежде чем он отправит соответствующее сообщение «вверх» по дереву (за исключением сообщения об отмене, которое распространяется "вверх" сразу после его получения или если текущий участник инициирует прерывание).

Протокол динамической двухфазной фиксации (Dynamic two-phase commit, D2PC) - это вариант Tree 2PC без заранее определенного координатора. Он включает в себя несколько оптимизаций, которые были предложены ранее. Сообщения о согласии (голоса «Да») начинают распространяться со всех листьев, каждый лист при выполнении своих задач от имени транзакции (подготовка к работе). Промежуточный (не листовой) узел отправляет готовое сообщение о согласовании последнему (единственному) соседнему узлу, от которого сообщение о согласовании еще не было получено. Координатор определяется динамически путем передачи сообщений соглашения по дереву транзакций в том месте, где они сталкиваются. Они сталкиваются либо в узле дерева транзакций, чтобы быть координатором, либо на краю дерева. В последнем случае один из двух узлов ребра выбирается координатором (любой узел). D2PC является оптимальным по времени (среди всех экземпляров определенного дерева транзакций и любой конкретной реализации протокола Tree 2PC; все экземпляры имеют одно и то же дерево; каждый экземпляр имеет другой узел в качестве координатора): при выборе оптимального координатора D2PC фиксирует оба координатора и каждый участник за минимально возможное время, что позволяет как можно раньше высвободить заблокированные ресурсы каждого участника транзакции (узел дерева).

Смотрите также

использованная литература