Алгоритм консенсуса Чандры – Туега - Википедия - Chandra–Toueg consensus algorithm
В Алгоритм консенсуса Чандры – Туега, опубликованный Тушаром Дипаком Чандрой и Сэмом Туегом в 1996 году, представляет собой алгоритм решения консенсус в сети ненадежных процессов, оснащенных в конечном итоге сильный детектор отказов. Детектор отказов - это абстрактная версия таймауты; он сигнализирует каждому процессу, когда другие процессы могли дать сбой. В конечном итоге сильный детектор отказов - это тот, который никогда не идентифицирует немного конкретный исправный процесс как потерпевший неудачу после некоторого начального периода путаницы, и, в то же время, в конечном итоге выявляет все ошибочные процессы как неудачные (где ошибочный процесс - это процесс, который в конечном итоге дает сбой или сбой, а исправный процесс никогда не дает сбоя). Алгоритм консенсуса Чандры – Туега предполагает, что количество неисправных процессов, обозначенное ж, меньше n / 2 (т.е. меньшинство), т.е. предполагает ж < п/ 2, где n - общее количество процессов.
Алгоритм
Алгоритм работает по циклам и использует вращающийся координатор: в каждом раунде. р, процесс, идентичность которого задается р мод п выбран координатором. Каждый процесс отслеживает свое текущее предпочтительное значение решения (изначально равное входу процесса) и последний раунд, на котором он изменил свое значение решения (значение отметка времени ). Действия, выполняемые в каждом раунде:
- Все процессы отправляют координатору (r, предпочтение, временная метка).
- Координатор ожидает получения сообщений как минимум от половины процессов (включая его самого).
- Затем он выбирает в качестве предпочтения значение с самой последней меткой времени среди отправленных.
- Координатор отправляет (r, предпочтение) всем процессам.
- Каждый процесс ожидает (1) получения (r, предпочтение) от координатора или (2) его детектором сбоев, чтобы идентифицировать координатор как сбойный.
- В первом случае он устанавливает свои собственные предпочтения в соответствии с предпочтениями координатора и отвечает ack (r).
- Во втором случае он отправляет nack (r) координатору.
- Координатор ожидает получения подтверждения (r) или nack (r) от большинства процессов.
- Если он получает подтверждение (r) от большинства, он отправляет решение (предпочтение) всем процессам.
- Любой процесс, который получает решение (предпочтение) в первый раз, передает решение (предпочтение) всем процессам, затем принимает решение о предпочтении и завершается.
Обратите внимание, что этот алгоритм используется для определения только одного значения.
Правильность
Определение проблемы
Алгоритм, который «решает» проблему консенсуса, должен обеспечивать следующие свойства:
- завершение: все процессы определяют значение;
- согласие: все процессы принимают решение об одной и той же стоимости; и
- валидность: все процессы принимают решение о значении, которое было входным значением некоторого процесса;
Предположения
Прежде чем утверждать, что алгоритм консенсуса Чандры – Туега удовлетворяет трем свойствам, указанным выше, напомним, что этот алгоритм требует п = 2*ж +1 процессов, из которых не более f неисправны.
Кроме того, обратите внимание, что этот алгоритм предполагает наличие в конечном итоге сильный детектор отказов (которые доступны и могут использоваться для обнаружения сбоя узла). В конечном итоге сильный детектор отказов - это тот, никогда определяет немного конкретный исправный (или правильный) процесс как потерпевший неудачу после некоторого начального периода путаницы и, в то же время, в конечном итоге выявляющий все сбойные процессы как сбойные.
Доказательство правильности
Прекращение удерживается, потому что в конечном итоге детектор отказов перестает подозревать немного исправный процесс p и в конечном итоге p становится координатором. Если алгоритм не завершился до того, как это произойдет в каком-то раунде r, то каждый исправный процесс в раунде r ожидает получения предпочтения p и отвечает подтверждением ack (r). Это позволяет p собрать достаточно подтверждений для отправки решения (предпочтения), вызывая завершение каждого процесса. В качестве альтернативы может оказаться, что какой-то неисправный координатор отправляет решение только нескольким процессам; но если какой-либо из этих процессов исправен, они транслируют решение всем остальным процессам, заставляя их принять решение и завершиться.
Срок действия следует из того факта, что каждое предпочтение начинается как вход некоторого процесса; в протоколе нет ничего, что генерировало бы новые предпочтения.
Соглашение потенциально труднее всего достичь. Возможно, что координатор в одном раунде r может послать сообщение о решении из некоторого значения v, которое распространяется только на несколько процессов, прежде чем какой-либо другой координатор в более позднем раунде r 'отправит сообщение о решении для некоторого другого значения v '. Чтобы показать, что этого не происходит, обратите внимание на то, что перед тем, как первый координатор сможет отправить решение (v), он должен получить подтверждение (r) от большинства процессов; но тогда, когда любой последующий координатор опрашивает большинство процессов, последнее большинство будет перекрывать предыдущее, и v будет самым последним значением. Итак, любые два координатора, отправляющие сообщение о решении, отправляют одно и то же значение.