Алгоритм выбора лидера
Алгоритм выбора лидера — это процесс в системе распределённых вычислений, который назначает один процесс организатором некоторой задачи, распределённой на несколько компьютеров (узлов). До начала выполнения задачи все узлы сети либо не осведомлены, какой узел будет вести себя как «лидер» (или координатор) задачи, либо не в состоянии общаться с текущим координатором. После того, как алгоритм выбора лидера отработает, каждый узел сети знает об определённом единственном узле, выступающем в качестве лидера.
Узлы сети общаются друг с другом с целью решить, который из них возьмёт на себя роль «лидера». Для этого им нужен некоторый метод, чтобы разрушить симметрию узлов. Например, если каждый узел имеет уникальные и отличительные черты, которые можно сравнить, то узлы могут сравнивать эти черты и решать, какой узел с лучшей характеристикой является лидером.
Постановку задачи часто приписывается ЛеЛанну, который формализовал её как метод создания нового маркера в потерявшей маркер сети Token ring.
Алгоритмы выбора лидера разрабатываются экономичными в терминах передачи общего числа байтов и времени. Алгоритм, предложенный Галлагером, Хамблетом и СпираШаблон:Sfn для общих неориентированных графов, имеет сильное влияние на разработку распределённых алгоритмов вообще и выиграл премию Дейкстры как авторитетная статья в области распределённых вычислений.
Было предложено много разных алгоритмов для различных топологий сетей — графов, таких как неориентированные кольца, ненаправленных колец, полных графов, решёток, ориентированных эйлеровых графов и других. Основной метод, который отвязывает проблему семейства графов от разработки алгоритма выбора лидера, был предложен Корачем, Куттеном и МораномШаблон:Sfn.
Определение
Задача выбора лидера предназначена для решения каждым процессором, будет он лидером или нет, с ограничением, что в точности один процессор решает, что он будет лидеромШаблон:Sfn. Алгоритм решает задачу выбора лидера, если
- Состояния процессоров делятся на выбранный и не выбранный. Будучи выбранным, процессор остаётся выбранным (аналогично, не выбранным).
- При любом выполнении алгоритма в точности один процессор становится выбранным, а остальные решают, что они не выбраны.
Правильный алгоритм выбора лидера должен удовлетворять следующим условиямШаблон:Sfn:
- Завершение: алгоритм должен завершиться за конечное время выбором лидера. В рандомизированных подходах это условие иногда ослабляется (например, требованием завершения с вероятностью 1).
- Единственность: имеется в точности один процесс, который считает себя лидером.
- Согласие: все остальные процессы знают, кто есть лидер.
Алгоритм выбора лидера может варьироваться в следующих аспектахШаблон:Sfn:
- Механизм обмена сообщениями: процессоры либо синхронны, кода процессы синхронизируются сигналом часов, либо Шаблон:Не переведено 5, когда процессы протекают с произвольными скоростями.
- Имена процессов: имеют ли процессы уникальные идентификаторы или неразличимы (анонимны).
- Сетевая топология: например, кольцо, ациклический граф или полный граф.
- Размер сети: алгоритм может или не может использовать знание числа процессов в системе.
Алгоритмы
Выборы лидера в кольцах

Кольцо является топологией связанного графа, в которой каждый узел связан в точности с двумя другими узлами, т.е. в графе с n узлами имеется в точности n рёбер, соединяющих узлы. Кольцо может быть однонаправленным, что означает, что процессоры могут общаться только в одном направлении (узел может посылать сообщения только налево или только направо), или двунаправленным, что означает, что процессоры могут пересылать и получать сообщения в обоих направлениях (узел может посылать сообщения как налево, так и направо).
Анонимные кольца
Говорят, что кольцо анонимно, если любой процессор неотличим. Более формально, система представляет собой тот же самый конечный автомат (то есть автомат, имеющий конечное число внутренних состояний) для любого процессораШаблон:Sfn. Не существует детерминистского алгоритма для выбора лидера в анонимных кольцах, если даже размер сети известен процессамШаблон:SfnШаблон:Sfn. Это потому, что нет возможности разрушить симметрию в анонимном кольце, если все процессы работают с одинаковой скоростью. Состояние процессоров после некоторых шагов зависит только от начального состояния соседних узлов. Таким образом, поскольку их состояния идентичны и выполняются те же процедуры, в каждом раунде каждый процессор посылает те же самые сообщения. Поэтому состояние каждого процессора меняется также одинаково и если один процессор выбирает себя в качестве лидера, то же самое сделают все остальные процессоры.
Для простоты, докажем это для анонимных синхронных колец. Докажем от противного. Рассмотрим анонимное кольцо R размера n>1. Пусть существует алгоритм «A» решения задачи выбора лидера в анонимном кольце RШаблон:Sfn.
- Лемма: После раунда выполнения алгоритма A в кольце R все процессы имеют одно и то же состояние.
Доказательство: Докажем по индукции по .
База индукции: : все процессы в начальном состоянии, так что все процессы идентичны.
Гипотеза индукции: Предположим, что лемма верна для первых раундов.
Шаг индукции: В раунде любой процесс посылает одно и то же сообщение направо и одно и то же сообщение налево. Поскольку все процессы имеют одно и то же состояние в раунде , в раунде k каждый процесс получит сообщение слева и сообщение справа. Поскольку все процессы получат одинаковые сообщения в раунде , они перейдут в одно и то же состояние после раунда .
Эта лемма противоречит тому, что после некоторого конечного числа раундов выполнения алгоритма A один из процессов окажется в выбранном состоянии, а остальные окажутся в невыбранном.
Случайные выборы лидера
Общим подходом решения задачи выбора лидера в анонимных сетях является использование вероятностных алгоритмов. При таком подходе обычно процессоры предполагают некоторого рода идентификацию, основанную на вероятностной функции, и передают его остальной части сети. В конце концов, применяя алгоритм, осуществляется выбор лидера (с высокой вероятностью).
Асинхронное кольцоШаблон:Sfn

Поскольку нет алгоритма для анонимных колец (как доказано выше), асинхронные кольца будем считать неанонимными. В неанонимных кольцах каждый процесс имеет уникальный идентификатор и процесс не знает о размере кольца. Выбор лидера в асинхронных кольцах может быть осуществлён алгоритмом с посылкой или сообщений.
В алгоритме любой процесс посылает сообщение с его налево, затем ждёт сообщения справа. Если в полученном сообщении больше его собственного , сообщение передаётся налево, если же меньше, сообщение игнорируется и действий никаких не производится. Если в сообщении равен собственному , налево посылается сообщение о признании себя выбранным лидером. Остальные процессы передают объявление лидера налево и переводят своё состояние в невыбранные. Ясно, что верхняя граница числа сообщений для этого алгоритма равна .
Алгоритм работает в несколько фаз. На фазе процесс определяет, не является ли он победителем среди левых соседей и правых соседей. Если он является победителем, он может перейти в следующую фазу. На фазе для каждого процесса необходимо определиться, является ли он победителем, путём посылки сообщения с левому и правому соседям (соседи не передают сообщения дальше). Сосед отвечает сообщением , только если в сообщении больше его собственного , в противном случает он отвечает сообщением . Если получает два сообщения , слева и справа, процесс является победителем на фазе . На фазе победитель фазы должен послать сообщение с его левым и правым соседям. Если соседи на пути следования получают в сообщении больший их собственного , они пересылают сообщение следующему соседу, в противном случае отвечают сообщением . Если -й сосед получает , больший его собственного , он посылает назад , в противном случае посылает . Если процесс получает два сообщения , он является победителем в фазе . В последней фазе победитель получает свой собственный в сообщении, обрывает передачу сообщения далее и посылает сообщение о завершении другим процессам. В худшем случае в каждой фазе имеется победителей, где является номером фазы. Всего будет фаз. Каждый победитель посылает порядка сообщений в каждой фазе. Таким образом, сложность по числу сообщений равна .
Синхронное кольцо
В книге Атья и Уэдча «Распределённые вычисления» (Шаблон:Lang-en)Шаблон:Sfn они описывают неоднородный алгоритм, использующий сообщений в синхронном кольце с известным размером кольца. Алгоритм разбивается на фазы, каждая фаза имеет раундов, каждый проход занимает одну единицу времени. На фазе , если имеется процесс с , этот процесс посылает прерывающее сообщение (Шаблон:Lang-en) другим процессам (посылка прерывающих сообщений стоит раундов). В противном случае переходим к следующей фазе. Алгоритм проверяет, имеется ли фаза с номером, равным процесса, затем делает те же шаги, что и для фазы . В конце выполнения алгоритма минимальное будет выбрано в качестве лидера. Алгоритм использует ровно сообщений и раундов.
Итаи и РодэШаблон:Sfn предложили алгоритм для ненаправленного кольца с синхронными процессами. Они предполагают, что размер кольца (число узлов) процессам известно. Для кольца с размером n активны процессоров. Каждый процессор решает с вероятностью стать кандидатом. В конце каждой фазы каждый процесс вычисляет число кандидатов, и если это число равно 1, объявляет себя лидером. Для определения числа c кандидатов каждый кандидат посылает токен (маркер) в начале фазы, который проходит через кольцо, возвратившись ровно через n единиц времени пославшему токен узлу. Каждый процессор определяет значение c путём подсчёта числа токенов, прошедших через узел. Этот алгоритм осуществляет выбор лидера с ожидаемой сложностью . Аналогичный подход используется также, когда используется механизм тайм-аута для определения взаимных блокировок в системеШаблон:Sfn. Существуют алгоритмы для колец специального размера, таких как кольца с простым числом узловШаблон:SfnШаблон:Sfn и нечётным числом узловШаблон:Sfn.
Однородный алгоритм
В обычных подходах выбора лидера размер кольца предполагается известным процессам. В случае анонимных колец без использования внешней сущности невозможно выбрать лидера. Даже если предположить, что алгоритм существует, лидер не может оценить размер кольца, т.е. в любом анонимном кольце существует положительная вероятность, что алгоритм вычислит неверный размер сетиШаблон:Sfn. Чтобы преодолеть эту проблему, Фишер и Цзян использовали так называемого оракла (предсказателя) , которого каждый процессор может спросить, имеется ли уникальный лидер. Они показали, что после некоторого промежутка времени оракл гарантированно вернёт один и тот же ответ всем процессамШаблон:Sfn.
Кольца с уникальными ID
В одной из ранних работ Чан и РобертсШаблон:Sfn предложили однородный алгоритм, в котором процессор с наибольшим ID выбирается в качестве лидера. Каждый процессор посылает собственный ID в направлении по часовой стрелке. Процесс получает сообщение и сравнивает ID сообщения с собственным ID. Если ID сообщения больше, сообщение посылается дальше, в противном случае оно отбрасывается. Они показали, что алгоритм использует не более сообщений, а в среднем сообщений.
Шаблон:Не переведено 5Шаблон:Sfn улучшили этот алгоритм до сложности по сообщениям, введя двунаправленную схему рассылки сообщений (позволив процессорам посылать сообщения в обоих направлениях.
Выборы лидера в сетке

Решётка является другим популярным видом сетевой топологии, особенно в параллельных системах, системах избыточной памяти (Шаблон:Lang-en) и сетей внутренней коммуникацииШаблон:Sfn. В решёточной структуре узлы являются либо углами (только два соседа), границами (три соседа) или внутренними (с четырьмя соседями).Число рёбер в решётке размера равно .
Неориентированная сеть
Обычный алгоритм для решения задачи выбора лидера в неориентированной сети заключается в выборе только одного из четырёх угловых узлов в качестве лидера. Поскольку угловые узлы не могут быть осведомлены о состоянии других процессов, алгоритм должен начинаться в угловых узлах. Лидер выбирается следующим образомШаблон:Sfn.
- Процесс просыпания: на этой стадии k узлов инициируют выборный процесс. Каждый инициатор посылает сообщение о просыпании всем соседним узлам. Если узел не является инициатором, он просто перенаправляет сообщение другим узлам. На этой стадии будет послано максимум сообщений.
- Процесс выборов: выборы во внешнем кольце занимают две стадии с посылкой максимум сообщений.
- Прекращение: лидер посылает сообщение всем узлам, что требует максимум сообщений.
Сложность сообщения не превосходит , а если решётка квадратная, .
Ориентированная сеть
Ориентированная решётка является специальным случаем, в которой порты помечены как северный, южный, восточный и западный. Выбор лидера в ориентированной решётке тривиален. Нам следует выбрать угол, например «северо-восточный» и удостовериться, что узел знает, что он является лидером.
Тороидальная сетевая структура

Специальным случаем решёточной архитектуры является тор, в котором решётка «свёрнута». В этой структуре каждый узел имеет в точности 4 соединяющих ребра. Один из подходов выборов в такой структуре известен как выборные туры. Подобно процедурам в кольцевых структурах этот метод на каждом туре исключает потенциальных кандидатов, пока не останется единственный кандидат. Этот узел и становится лидером и уведомляет остальные процессы о прекращении выборовШаблон:Sfn. Этот подход используется, чтобы получить сложность O(n). Существует также более практичные подходы с наличием в сети разорванных соединенийШаблон:SfnШаблон:Sfn.
Выборы в гиперкубах

Гиперкуб — это сеть, состоящая из узлов, каждый со степенью k. Аналогичные описанным выше выборные туры могут быть использованы для решении задачи выбора лидера. В каждом туре соревнуются пары узлов (называемые дуэлянтами) и победитель переходит на следующий тур, это означает, что только половина дуэлянтов переходят на следующий тур. Процедура продолжается, пока не останется один дуэлянт, и он становится лидером. Будучи выбранным, лидер сообщает о выборе всем остальным процессам. Этот алгоритм требует посылки сообщений. В случае неориентированных гиперкубов используется аналогичный подход, но сложность по сообщениям вырастает до Шаблон:Sfn.
Выборы в полных сетях

Полные сети — это структуры, в которых все процессы связаны друг с другом, т.е. степень каждого узла равна n-1, где n представляет собой размер сети. Известно оптимальное решение со сложностью по числу сообщений и памятиШаблон:Sfn. В этом алгоритме процессы имеют следующие состояния
- Вне игры: узлы не участвуют в алгоритме выбора лидера.
- Пассивное: начальное состояние процессов до начала выборов.
- Кандидат: статус узла после просыпания. Предполагается, что кандидаты станут лидерами.
Для выбора лидера рассматривается виртуальное кольцо в сети. Все процессоры первоначально переходят в начальное состояние, пока их не разбудят. Когда узлы просыпаются, они становятся кандидатами в лидеры. Основываясь на схеме приоритетов, кандидаты участвуют в виртуальном кольце. В некоторый момент времени кандидаты будут знать идентификацию кандидатов, предшествующих им в кольце. Кандидаты с большим приоритетом спрашивают кандидатов с меньшим приоритетом о их предшественниках. Кандидаты с более низким приоритетом переходят в состояние вне игры после ответа кандидату с бо́льшим приоритетом. Основываясь на данной схеме, кандидат с наибольшим приоритетом, в конце концов, знает, что все узлы в системе вне игры, за исключением его самого, и в этот момент он знает, что является лидером.
Универсальные техники выбора лидера
Как подсказывает название, эти алгоритмы разработаны для использования в любом типе сетей процессов без предварительного знания топологии сети или её свойств, таких как размерШаблон:Sfn.
Протокол Shout
Протокол Shout строит остовное дерево на графе и выбирает корень в качестве лидера. Алгоритм имеет общую стоимость, линейную от числа рёбер.
Эта техника по существу подобна поиску минимального остовного дерева, в котором корень дерева становится лидером. Основная идея этого метода заключается в слиянии индивидуальных узлов для формирования более крупных структур. Результатом алгоритма является дерево (граф без циклов), корень которого и становится лидером всей системы. Цена метода mega-merger равна , где m — число рёбер, а n — число узлов.
Yo-yo

Шаблон:Не переведено 5 является алгоритмом поиска минимума, состоящим из двух фаз: фазы подготовки и серии итераций Шаблон:Sfn. На первой фазе (подготовка), каждый узел обменивается своим 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- некоторое значение получено более чем по одному входному ребру, узел просит всех пославших сообщение, кроме одного, удалить связь с собой.
Метод имеет общую стоимость по сообщениям. Его действительная сложность, включая обрезку, не известна и является открытой проблемой.
Приложения
Радиосети
В протоколах радиосетей выбор лидера часто используется в качестве первого шага для получения более продвинутых коммуникационных примитивов, таких как сбор данных или широковещаниеШаблон:Sfn. Сама натура беспроводных сетей порождает коллизии, когда узлы начинают передачу в тот же самый момент времени. Выбор лидера позволяет лучше координировать этот процесс. В то время как диаметр D сети является естественной нижней границей для времени, необходимого для выбора лидера, верхние и нижние границы для задачи выбора лидера зависят от специфики изучаемой модели.
Модели и время работы
В радиосетях n узлов могут в любом раунде выбрать, передавать сообщение или получать. Если не доступно обнаружение коллизий, то узел не в состоянии различить тишину и получение более одного пакета одновременно. При наличии обнаружения коллизий узел может обнаружить получение двух и более входящих сообщений одновременно, хотя он и не в состоянии их декодировать в этом случае. В модели beeping[1] узлы могут различить между тишиной и по меньшей мере одним сообщением с помощью обнаружения несущей.
Известные времена для Шаблон:Не переведено 5 варьируются от константы (для случая обнаружения коллизий) до O(n \log n) раундов (детерминированные сети и сети без обнаружения коллизий). В Шаблон:Не переведено 5 известное время варьируется где-то от раундов (с высокой вероятностью в модели beeping), (детерминированные модели в модели beeping), (детерминированные модели с обнаружением коллизий) до раундов (детерминированные модели и модели без обнаружения коллизий).
См. также
Примечания
Литература
- Шаблон:Статья
- Шаблон:Статья
- Шаблон:Книга
- Шаблон:Статья
- Шаблон:Книга
- Шаблон:Статья
- Шаблон:Статья
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Статья
- Шаблон:Статья
- Шаблон:Статья
- Шаблон:Книга
- Шаблон:Статья
- ↑ В этой модели время разделено на синхронные раунды и в каждый раунд узел может либо слушать, либо передавать единичный сигнал (beep) своим соседям Шаблон:Harv.