Алгоритм выбора лидера (Glikjnmb fdQkjg ln;yjg)
Алгоритм выбора лидера — это процесс в системе распределённых вычислений, который назначает один процесс организатором некоторой задачи, распределённой на несколько компьютеров (узлов). До начала выполнения задачи все узлы сети либо не осведомлены, какой узел будет вести себя как «лидер» (или координатор) задачи, либо не в состоянии общаться с текущим координатором. После того, как алгоритм выбора лидера отработает, каждый узел сети знает об определённом единственном узле, выступающем в качестве лидера.
Узлы сети общаются друг с другом с целью решить, который из них возьмёт на себя роль «лидера». Для этого им нужен некоторый метод, чтобы разрушить симметрию узлов. Например, если каждый узел имеет уникальные и отличительные черты, которые можно сравнить, то узлы могут сравнивать эти черты и решать, какой узел с лучшей характеристикой является лидером.
Постановку задачи часто приписывается ЛеЛанну, который формализовал её как метод создания нового маркера в потерявшей маркер сети Token ring.
Алгоритмы выбора лидера разрабатываются экономичными в терминах передачи общего числа байтов и времени. Алгоритм, предложенный Галлагером, Хамблетом и Спира[1] для общих неориентированных графов, имеет сильное влияние на разработку распределённых алгоритмов вообще и выиграл премию Дейкстры как авторитетная статья в области распределённых вычислений.
Было предложено много разных алгоритмов для различных топологий сетей — графов, таких как неориентированные кольца, ненаправленных колец, полных графов, решёток, ориентированных эйлеровых графов и других. Основной метод, который отвязывает проблему семейства графов от разработки алгоритма выбора лидера, был предложен Корачем, Куттеном и Мораном[2].
Определение
[править | править код]Задача выбора лидера предназначена для решения каждым процессором, будет он лидером или нет, с ограничением, что в точности один процессор решает, что он будет лидером[3]. Алгоритм решает задачу выбора лидера, если
- Состояния процессоров делятся на выбранный и не выбранный. Будучи выбранным, процессор остаётся выбранным (аналогично, не выбранным).
- При любом выполнении алгоритма в точности один процессор становится выбранным, а остальные решают, что они не выбраны.
Правильный алгоритм выбора лидера должен удовлетворять следующим условиям[4]:
- Завершение: алгоритм должен завершиться за конечное время выбором лидера. В рандомизированных подходах это условие иногда ослабляется (например, требованием завершения с вероятностью 1).
- Единственность: имеется в точности один процесс, который считает себя лидером.
- Согласие: все остальные процессы знают, кто есть лидер.
Алгоритм выбора лидера может варьироваться в следующих аспектах[5]:
- Механизм обмена сообщениями: процессоры либо синхронны, кода процессы синхронизируются сигналом часов, либо асинхронны[англ.], когда процессы протекают с произвольными скоростями.
- Имена процессов: имеют ли процессы уникальные идентификаторы или неразличимы (анонимны).
- Сетевая топология: например, кольцо, ациклический граф или полный граф.
- Размер сети: алгоритм может или не может использовать знание числа процессов в системе.
Алгоритмы
[править | править код]Выборы лидера в кольцах
[править | править код]Кольцо является топологией связанного графа, в которой каждый узел связан в точности с двумя другими узлами, т.е. в графе с n узлами имеется в точности n рёбер, соединяющих узлы. Кольцо может быть однонаправленным, что означает, что процессоры могут общаться только в одном направлении (узел может посылать сообщения только налево или только направо), или двунаправленным, что означает, что процессоры могут пересылать и получать сообщения в обоих направлениях (узел может посылать сообщения как налево, так и направо).
Анонимные кольца
[править | править код]Говорят, что кольцо анонимно, если любой процессор неотличим. Более формально, система представляет собой тот же самый конечный автомат (то есть автомат, имеющий конечное число внутренних состояний) для любого процессора[3]. Не существует детерминистского алгоритма для выбора лидера в анонимных кольцах, если даже размер сети известен процессам[3][6]. Это потому, что нет возможности разрушить симметрию в анонимном кольце, если все процессы работают с одинаковой скоростью. Состояние процессоров после некоторых шагов зависит только от начального состояния соседних узлов. Таким образом, поскольку их состояния идентичны и выполняются те же процедуры, в каждом раунде каждый процессор посылает те же самые сообщения. Поэтому состояние каждого процессора меняется также одинаково и если один процессор выбирает себя в качестве лидера, то же самое сделают все остальные процессоры.
Для простоты, докажем это для анонимных синхронных колец. Докажем от противного. Рассмотрим анонимное кольцо R размера n>1. Пусть существует алгоритм «A» решения задачи выбора лидера в анонимном кольце R[3].
- Лемма: После раунда выполнения алгоритма A в кольце R все процессы имеют одно и то же состояние.
Доказательство: Докажем по индукции по .
База индукции: : все процессы в начальном состоянии, так что все процессы идентичны.
Гипотеза индукции: Предположим, что лемма верна для первых раундов.
Шаг индукции: В раунде любой процесс посылает одно и то же сообщение направо и одно и то же сообщение налево. Поскольку все процессы имеют одно и то же состояние в раунде , в раунде k каждый процесс получит сообщение слева и сообщение справа. Поскольку все процессы получат одинаковые сообщения в раунде , они перейдут в одно и то же состояние после раунда .
Эта лемма противоречит тому, что после некоторого конечного числа раундов выполнения алгоритма A один из процессов окажется в выбранном состоянии, а остальные окажутся в невыбранном.
Случайные выборы лидера
[править | править код]Общим подходом решения задачи выбора лидера в анонимных сетях является использование вероятностных алгоритмов. При таком подходе обычно процессоры предполагают некоторого рода идентификацию, основанную на вероятностной функции, и передают его остальной части сети. В конце концов, применяя алгоритм, осуществляется выбор лидера (с высокой вероятностью).
Асинхронное кольцо[3]
[править | править код]Поскольку нет алгоритма для анонимных колец (как доказано выше), асинхронные кольца будем считать неанонимными. В неанонимных кольцах каждый процесс имеет уникальный идентификатор и процесс не знает о размере кольца. Выбор лидера в асинхронных кольцах может быть осуществлён алгоритмом с посылкой или сообщений.
В алгоритме любой процесс посылает сообщение с его налево, затем ждёт сообщения справа. Если в полученном сообщении больше его собственного , сообщение передаётся налево, если же меньше, сообщение игнорируется и действий никаких не производится. Если в сообщении равен собственному , налево посылается сообщение о признании себя выбранным лидером. Остальные процессы передают объявление лидера налево и переводят своё состояние в невыбранные. Ясно, что верхняя граница числа сообщений для этого алгоритма равна .
Алгоритм работает в несколько фаз. На фазе процесс определяет, не является ли он победителем среди левых соседей и правых соседей. Если он является победителем, он может перейти в следующую фазу. На фазе для каждого процесса необходимо определиться, является ли он победителем, путём посылки сообщения с левому и правому соседям (соседи не передают сообщения дальше). Сосед отвечает сообщением , только если в сообщении больше его собственного , в противном случает он отвечает сообщением . Если получает два сообщения , слева и справа, процесс является победителем на фазе . На фазе победитель фазы должен послать сообщение с его левым и правым соседям. Если соседи на пути следования получают в сообщении больший их собственного , они пересылают сообщение следующему соседу, в противном случае отвечают сообщением . Если -й сосед получает , больший его собственного , он посылает назад , в противном случае посылает . Если процесс получает два сообщения , он является победителем в фазе . В последней фазе победитель получает свой собственный в сообщении, обрывает передачу сообщения далее и посылает сообщение о завершении другим процессам. В худшем случае в каждой фазе имеется победителей, где является номером фазы. Всего будет фаз. Каждый победитель посылает порядка сообщений в каждой фазе. Таким образом, сложность по числу сообщений равна .
Синхронное кольцо
[править | править код]В книге Атья и Уэдча «Распределённые вычисления» (англ. Distributed Computing)[3] они описывают неоднородный алгоритм, использующий сообщений в синхронном кольце с известным размером кольца. Алгоритм разбивается на фазы, каждая фаза имеет раундов, каждый проход занимает одну единицу времени. На фазе , если имеется процесс с , этот процесс посылает прерывающее сообщение (англ. termination message) другим процессам (посылка прерывающих сообщений стоит раундов). В противном случае переходим к следующей фазе. Алгоритм проверяет, имеется ли фаза с номером, равным процесса, затем делает те же шаги, что и для фазы . В конце выполнения алгоритма минимальное будет выбрано в качестве лидера. Алгоритм использует ровно сообщений и раундов.
Итаи и Родэ[7] предложили алгоритм для ненаправленного кольца с синхронными процессами. Они предполагают, что размер кольца (число узлов) процессам известно. Для кольца с размером n активны процессоров. Каждый процессор решает с вероятностью стать кандидатом. В конце каждой фазы каждый процесс вычисляет число кандидатов, и если это число равно 1, объявляет себя лидером. Для определения числа c кандидатов каждый кандидат посылает токен (маркер) в начале фазы, который проходит через кольцо, возвратившись ровно через n единиц времени пославшему токен узлу. Каждый процессор определяет значение c путём подсчёта числа токенов, прошедших через узел. Этот алгоритм осуществляет выбор лидера с ожидаемой сложностью . Аналогичный подход используется также, когда используется механизм тайм-аута для определения взаимных блокировок в системе[8]. Существуют алгоритмы для колец специального размера, таких как кольца с простым числом узлов[9][10] и нечётным числом узлов[11].
Однородный алгоритм
[править | править код]В обычных подходах выбора лидера размер кольца предполагается известным процессам. В случае анонимных колец без использования внешней сущности невозможно выбрать лидера. Даже если предположить, что алгоритм существует, лидер не может оценить размер кольца, т.е. в любом анонимном кольце существует положительная вероятность, что алгоритм вычислит неверный размер сети[12]. Чтобы преодолеть эту проблему, Фишер и Цзян использовали так называемого оракла (предсказателя) , которого каждый процессор может спросить, имеется ли уникальный лидер. Они показали, что после некоторого промежутка времени оракл гарантированно вернёт один и тот же ответ всем процессам[13].
Кольца с уникальными ID
[править | править код]В одной из ранних работ Чан и Робертс[14] предложили однородный алгоритм, в котором процессор с наибольшим ID выбирается в качестве лидера. Каждый процессор посылает собственный ID в направлении по часовой стрелке. Процесс получает сообщение и сравнивает ID сообщения с собственным ID. Если ID сообщения больше, сообщение посылается дальше, в противном случае оно отбрасывается. Они показали, что алгоритм использует не более сообщений, а в среднем сообщений.
Хиршберг и Синклер[англ.][15] улучшили этот алгоритм до сложности по сообщениям, введя двунаправленную схему рассылки сообщений (позволив процессорам посылать сообщения в обоих направлениях.
Выборы лидера в сетке
[править | править код]Решётка является другим популярным видом сетевой топологии, особенно в параллельных системах, системах избыточной памяти (англ. redundant memory systems) и сетей внутренней коммуникации[16]. В решёточной структуре узлы являются либо углами (только два соседа), границами (три соседа) или внутренними (с четырьмя соседями).Число рёбер в решётке размера равно .
Неориентированная сеть
[править | править код]Обычный алгоритм для решения задачи выбора лидера в неориентированной сети заключается в выборе только одного из четырёх угловых узлов в качестве лидера. Поскольку угловые узлы не могут быть осведомлены о состоянии других процессов, алгоритм должен начинаться в угловых узлах. Лидер выбирается следующим образом[17].
- Процесс просыпания: на этой стадии k узлов инициируют выборный процесс. Каждый инициатор посылает сообщение о просыпании всем соседним узлам. Если узел не является инициатором, он просто перенаправляет сообщение другим узлам. На этой стадии будет послано максимум сообщений.
- Процесс выборов: выборы во внешнем кольце занимают две стадии с посылкой максимум сообщений.
- Прекращение: лидер посылает сообщение всем узлам, что требует максимум сообщений.
Сложность сообщения не превосходит , а если решётка квадратная, .
Ориентированная сеть
[править | править код]Ориентированная решётка является специальным случаем, в которой порты помечены как северный, южный, восточный и западный. Выбор лидера в ориентированной решётке тривиален. Нам следует выбрать угол, например «северо-восточный» и удостовериться, что узел знает, что он является лидером.
Тороидальная сетевая структура
[править | править код]Специальным случаем решёточной архитектуры является тор, в котором решётка «свёрнута». В этой структуре каждый узел имеет в точности 4 соединяющих ребра. Один из подходов выборов в такой структуре известен как выборные туры. Подобно процедурам в кольцевых структурах этот метод на каждом туре исключает потенциальных кандидатов, пока не останется единственный кандидат. Этот узел и становится лидером и уведомляет остальные процессы о прекращении выборов[16]. Этот подход используется, чтобы получить сложность O(n). Существует также более практичные подходы с наличием в сети разорванных соединений[18][19].
Выборы в гиперкубах
[править | править код]Гиперкуб — это сеть, состоящая из узлов, каждый со степенью k. Аналогичные описанным выше выборные туры могут быть использованы для решении задачи выбора лидера. В каждом туре соревнуются пары узлов (называемые дуэлянтами) и победитель переходит на следующий тур, это означает, что только половина дуэлянтов переходят на следующий тур. Процедура продолжается, пока не останется один дуэлянт, и он становится лидером. Будучи выбранным, лидер сообщает о выборе всем остальным процессам. Этот алгоритм требует посылки сообщений. В случае неориентированных гиперкубов используется аналогичный подход, но сложность по сообщениям вырастает до [16].
Выборы в полных сетях
[править | править код]Полные сети — это структуры, в которых все процессы связаны друг с другом, т.е. степень каждого узла равна n-1, где n представляет собой размер сети. Известно оптимальное решение со сложностью по числу сообщений и памяти[20]. В этом алгоритме процессы имеют следующие состояния
- Вне игры: узлы не участвуют в алгоритме выбора лидера.
- Пассивное: начальное состояние процессов до начала выборов.
- Кандидат: статус узла после просыпания. Предполагается, что кандидаты станут лидерами.
Для выбора лидера рассматривается виртуальное кольцо в сети. Все процессоры первоначально переходят в начальное состояние, пока их не разбудят. Когда узлы просыпаются, они становятся кандидатами в лидеры. Основываясь на схеме приоритетов, кандидаты участвуют в виртуальном кольце. В некоторый момент времени кандидаты будут знать идентификацию кандидатов, предшествующих им в кольце. Кандидаты с большим приоритетом спрашивают кандидатов с меньшим приоритетом о их предшественниках. Кандидаты с более низким приоритетом переходят в состояние вне игры после ответа кандидату с бо́льшим приоритетом. Основываясь на данной схеме, кандидат с наибольшим приоритетом, в конце концов, знает, что все узлы в системе вне игры, за исключением его самого, и в этот момент он знает, что является лидером.
Универсальные техники выбора лидера
[править | править код]Как подсказывает название, эти алгоритмы разработаны для использования в любом типе сетей процессов без предварительного знания топологии сети или её свойств, таких как размер[16].
Протокол Shout
[править | править код]Протокол Shout строит остовное дерево на графе и выбирает корень в качестве лидера. Алгоритм имеет общую стоимость, линейную от числа рёбер.
Эта техника по существу подобна поиску минимального остовного дерева, в котором корень дерева становится лидером. Основная идея этого метода заключается в слиянии индивидуальных узлов для формирования более крупных структур. Результатом алгоритма является дерево (граф без циклов), корень которого и становится лидером всей системы. Цена метода mega-merger равна , где m — число рёбер, а n — число узлов.
Yo-yo
[править | править код]Алгоритм Yo-Yo[англ.] является алгоритмом поиска минимума, состоящим из двух фаз: фазы подготовки и серии итераций [16]. На первой фазе (подготовка), каждый узел обменивается своим id со всеми соседями и в зависимости от результата связывающему ребру придаётся направление. Например, если узел x имеет меньший id, чем у узла y, ребро ориентируется от x в y. Если узел имеет меньший id, чем у всех его соседей, он становится источником. Узел же с бо́льшим id, чем у всех соседей, имеет только входящие рёбра и становится стоком. Все другие узлы являются внутренними.
Когда все рёбра получат ориентацию, алгоритм переходит к фазе итераций. Каждая итерация является туром выборов, в котором некоторые кандидаты удаляются. Каждая итерация имеет две фазы — YO- и -YO. В первой (YO-) фазе источники начинают процесс передачи в каждый сток наименьшего значения id источника, подсоединённого к стоку.
Yo-
- Источник (локальный минимум) передаёт значение своего id всем соседям
- Внутренний узел ждёт получения значения из всех входящих рёбер, вычисляет минимальное значение и передаёт во все исходящие рёбра.
- Сток (узел без исходящих рёбер) получает все значения и вычисляет минимальный id.
-Yo
- Сток посылает YES соседям, из которых получил наименьшее значение, и не посылает остальным
- Внутренний узел посылает YES по всем входящим рёбрам, из которых получил минимальное значение и не посылает остальным. Если он получил только NO, он посылает NO всем.
- Источник ждёт, пока не получит все голоса. Если все они YES, он выживает, а если нет, он больше не кандидат.
- Когда узел x посылает NO всем входящим соседям, логические направления этих рёбер инвертируется.
- Если узел получает NO по исходящему ребру, он меняет направление ребра.
После конечного тура любой источник, который получил NO больше не является источником и является стоком. В дополнительном туре, обрезка, удаляются бесполезные узлы, существование которых не влияет не следующие итерации.
- Если сток является листом, он бесполезен, а потому удаляется.
- Если на фазе YO- некоторое значение получено более чем по одному входному ребру, узел просит всех пославших сообщение, кроме одного, удалить связь с собой.
Метод имеет общую стоимость по сообщениям. Его действительная сложность, включая обрезку, не известна и является открытой проблемой.
Приложения
[править | править код]Радиосети
[править | править код]В протоколах радиосетей выбор лидера часто используется в качестве первого шага для получения более продвинутых коммуникационных примитивов, таких как сбор данных или широковещание[21]. Сама натура беспроводных сетей порождает коллизии, когда узлы начинают передачу в тот же самый момент времени. Выбор лидера позволяет лучше координировать этот процесс. В то время как диаметр D сети является естественной нижней границей для времени, необходимого для выбора лидера, верхние и нижние границы для задачи выбора лидера зависят от специфики изучаемой модели.
Модели и время работы
[править | править код]В радиосетях n узлов могут в любом раунде выбрать, передавать сообщение или получать. Если не доступно обнаружение коллизий, то узел не в состоянии различить тишину и получение более одного пакета одновременно. При наличии обнаружения коллизий узел может обнаружить получение двух и более входящих сообщений одновременно, хотя он и не в состоянии их декодировать в этом случае. В модели beeping[22] узлы могут различить между тишиной и по меньшей мере одним сообщением с помощью обнаружения несущей.
Известные времена для сетей без ретрансляторов[англ.] варьируются от константы (для случая обнаружения коллизий) до O(n \log n) раундов (детерминированные сети и сети без обнаружения коллизий). В сетях с ретрансляторами[англ.] известное время варьируется где-то от раундов (с высокой вероятностью в модели beeping), (детерминированные модели в модели beeping), (детерминированные модели с обнаружением коллизий) до раундов (детерминированные модели и модели без обнаружения коллизий).
См. также
[править | править код]Примечания
[править | править код]- ↑ Gallager, Humblet, Spira, 1983, с. 66–77.
- ↑ Korach, Kutten, Moran, 1990, с. 84–101.
- ↑ 1 2 3 4 5 6 Attiya, Welch, 2004, с. Глава 3.
- ↑ Gupta, van Renesse, Birman, 2000.
- ↑ Bakhshi, Fokkink, Pang, Van de Pol, 2008, с. 57—72.
- ↑ Attiya, Snir, 1988, с. 845—875.
- ↑ Itai, Rodeh, 1990, с. 60—87.
- ↑ Higham, Myers, 1998.
- ↑ Itkis, Lin, Simon, 1995, с. 288—302.
- ↑ Burns, Pachl, 1989, с. 330—344.
- ↑ Herman, 1990, с. 63—67.
- ↑ Tel, 2000.
- ↑ Fischer, Jiang, 2006, с. 395—409.
- ↑ Chang, Roberts, 1979, с. 281—283.
- ↑ Hirschberg, Sinclair, 1980, с. 627—628.
- ↑ 1 2 3 4 5 Santoro, 2006.
- ↑ Kallasjoki, 2007.
- ↑ Refai, Sharieh, Alsmmari, 2010.
- ↑ Al Refai, 2014.
- ↑ Villadangos, Cordoba, Farina, Prieto, 2005, с. 136—143.
- ↑ Haeupler, Ghaffari, 2013.
- ↑ В этой модели время разделено на синхронные раунды и в каждый раунд узел может либо слушать, либо передавать единичный сигнал (beep) своим соседям (Dufoulon, Burman, Beauquier 2018).
Литература
[править | править код]- Gallager R. G., Humblet P. A., Spira P. M. A Distributed Algorithm for Minimum-Weight Spanning Trees // ACM Transactions on Programming Languages and Systems. — 1983. — Январь (vol. 5). — doi:10.1145/357195.357200. Архивировано 12 октября 2016 года.
- Ephraim Korach, Shay Kutten, Shlomo Moran. A Modular Technique for the Design of Efficient Distributed Leader Finding Algorithms // ACM Transactions on Programming Languages and Systems. — 1990. — Т. 12, вып. 1. — doi:10.1145/77606.77610.
- Attiya H., Welch J. Distributed Computing: Fundamentals, Simulations and Advance Topics. — John Wiley & Sons inc., 2004.
- Attiya H., Snir M. Computing on an anonymous ring // JACM. — 1988. — Т. 35, вып. 4.
- Gupta I., van Renesse R., Birman K. P. A Probabilistically Correct Leader Election Protocol for Large Groups. — Cornell University, 2000. — (Technical Report).
- Bakhshi R., Fokkink W. J., Pang J., Van de Pol J. Leader Election in Anonymous Rings:Franklin Goes Probabilistic // TCS. — 2008. — Т. 273.
- Itai A., Rodeh M. Symmetry breaking in distributed networks. — 1990. — Т. 88, вып. 1.
- Higham L., Myers S. Self-Stabilizing Token Circulation on Anonymous Message Passing Rings // Second International Conference On Principles Of DIstributed Systems. — 1998.
- Itkis G., Lin C., Simon J. Deterministic, constant space, self-stabilizing выбор лидера on uniform rings. // Proc. 9th Workshop on Distributed Algorithms. — 1995. — Т. 972.
- Burns J., Pachl J. Uniform self-stabilizing rings // ACM Trans. Program. Lang. Systems. — 1989. — Т. 11, вып. 2.
- T. Herman. Probabilistic self-stabilization // Inf. Process. Lett.. — 1990. — Т. 35, вып. 2.
- Kallasjoki H. Election in Mesh, Cube and Complete Networks // Seminar on Theoretical Computer Science. — 2007.
- Santoro N. Design and Analysis of Distributed Algorithms. — Wiley, 2006.
- Refai M., Sharieh A., Alsmmari. Leader Election Algorithm in 2D Torus Network with the Presence of One Link Failure // The International Arab Journal of Information Technology. — 2010. — Т. 7, № 2.
M. Al Refai. Dynamic Leader Election Algorithm in 2D Torus Network with Multi Links Failure // IJCST. — 2014. — Т. 2, вып. 5.
- Tel G. Introduction to Distributed Algorithms. — 2nd edition. — Cambridge University Press, 2000.
- Fischer M., Jiang H. Self-stabilizing leader election in networks of _nite-state anonymous agents // Proc. 10th Conf. on Principles of Distributed Systems. — 2006. — Т. 4305.
- Chang E., Roberts R. An improved algorithm for decentralized extrema-finding in circular configurations of processes // ACM. — 1979. — Т. 22, вып. 5.
- Hirschberg D. S., Sinclair J. B. Decentralized extrema-finding in circular configurations of processors // ACM. — 1980. — Т. 23, вып. 11.
- Villadangos J., Cordoba A., Farina F., Prieto M. Efficient leader election in complete networks // PDP. — 2005.
- Bernhard Haeupler, Mohsen Ghaffari. Near Optimal Leader Election in Multi-Hop Radio Networks. — Proceedings of the Twenty-Fourth Annual ACM-SIAM Symposium on Discrete Algorithm. — 2013. — ISBN 978-1-61197-251-1. — doi:10.1137/1.9781611973105.54.
- Fabien Dufoulon, Janna Burman, Joffroy Beauquier. Beeping a Deterministic Time-Optimal Leader Election // Research Report HAL Id: hal-01794711. — LRI, Université Paris-Sud, CNRS, Université Paris-Saclay., 2018.
Для улучшения этой статьи желательно:
|