Во многих распределенных системах один из сайтов играет роль
В подобных случаях требуется выбор нового
Активные (функционирующие в данный момент) сайты должны est (
Максимальное значение нетрудно найти, если все локальные оценки собрать в одном месте. Но сложность заключается в том, что неясно, кто бы мог взять на себя сбор информации, а также зависимость процедуры сбора от архитектуры системы.
Алгоритм предназначен для динамического выбора
Сайты обмениваются сообщениями с тремя возможными значениями: "выборы", "ответ", "
Алгоритм выборов может начать любой сайт Si, который определил, что текущий SC не функционирует (например, если ему слишком долго приходится ожидать сообщения от
Алгоритм состоит из следующих шагов.
S_i рассылает сообщение "выборы" всем другим сайтам, имеющим большую оценку est(S_j), чем у него. Он ожидает, что они отправят ему сообщения "ответ".Si ответов длится не более чем время T. Если за это время ответы не получены, то сайт Si объявляет себя координатором и уведомляет об этом сайты с меньшей оценкой, чем est(Si) путем отправки им сообщений "Si ожидает еще некоторое ограниченное время прихода сообщения "Si начинает новые выборы.Si получает сообщение "Sj получает сообщение "выборы" и намерен участвовать в выборах, то он возвращает сообщение "ответ", после чего начинает новые выборы (напомним, его оценка est(Sj) больше, чем оценка est(Si) сайта, проводящего сейчас выборы).SC, то он начинает выборы. В том случае, если его оценка est(SC) является наивысшей, он объявляет себя координатором и сообщает об этом другим сайтам. Это происходит, несмотря на то, что какой-то сайт в период неработоспособности SC выиграл выборы и функционирует сейчас как
(рис 18.1) Пример выполнения алгоритма выбора "смещение"На рис. 18.1 изображены четыре шага выполнения алгоритма. Алгоритм начинается с того, что сайт S1 обнаружил, что сайт SC не выполняет свои функции S2 и S3. Те посылают сайту S1 "ответы" (шаг 1) и начинают собственные выборы (шаг 2). На рисунке предполагается, что оценки est сайтов увеличиваются слева направо.
Сайт S3 посылает "ответ" сайту S2, но сам дождаться ответа от SC не может, так как тот не функционирует. Поэтому S3 решает взять на себя функции
Тем временем истекает период ожидания сайтом S1 окончания выборов. Сообщения "ответ" он получил, а сообщение "C ) становится сайт S2.
Во всех приведенных ниже алгоритмах процесс на сайте p имеет переменную state с возможными значениями ( (проигравший). Иногда мы будем предполагать, что state имеет значение (спящий), когда p еще не выполнил ни одного шага алгоритма, и значение cand (кандидат), если p вступил в вычисление, но еще не знает, победил он или проиграл. Некоторые алгоритмы используют дополнительные состояния, такие как active, и др., которые будут указаны в самом алгоритме.
Важность уникальных идентификаторов в задаче выбора состоит в том, что они могут использоваться не только для адресации сообщений, но и для оценки сайтов. При разработке алгоритма выбора можно, например, потребовать, что сайт с наибольшей (или наоборот, с наименьшей) оценкой должен победить. Тогда задача состоит в поиске идентификатора с наибольшей оценкой с помощью децентрализованного алгоритма. В этом случае задачу выбора называют задачей поиска
Если топология распределенной системы – дерево или доступно
Когда сайт получит сообщение <wakeup> через каждый канал, он начинает выполнять алгоритм из лекции 12, который расширен таким образом, чтобы вычислять идентификатор сайта с наибольшей оценкой, и чтобы каждый сайт выполнял процедуру return(OK). Когда сайт выполняет эту процедуру, он знает идентификатор
В тексте алгоритма sent ("отправлено") используется, чтобы каждый сайт послал сообщения <wakeup> не более одного раза, а переменная counter (счетчик) используется для подсчета количества сообщений <wakeup>, полученных сайтом.
var is_sent : boolean init false ;
counter: integer init 0 ;
recp[q] : boolean для всех q принадлежащих Out(this) init false ;
m : integer init this ;
state : (sleep, coordinator, lost) init sleep ;
begin if this - инициатор then
begin is_sent := true ;
forall q in Out(this) do send <wakeup> to q
end ;
while counter < card(Out(this)) do
begin receive <wakeup> ; counter := counter + 1 ;
if not is_sent then
begin is_sent := true ;
forall q in Out(this) do send <wakeup> to q
end
end ;
(* Начало алгоритма из лекции 12 *)
while card{q : not recp[q]} > 1 do
begin receive (token, r) from q ; recp[q] := true ;
if est(r) > est(m) then m := r
end;
send (token, m) to q0 with not recp[q0] ;
receive (token, r) from q0 ;
if est(r) > est(m) then m := r; (* return(OK) с ответом m *)
if m = this then state := coordinator else state := lost ;
forall q in Out(this), q not equils q0 do send (token, m) to q
end
Когда хотя бы один сайт инициирует выполнение алгоритма, все сайты посылают сообщения <wakeup> всем своим соседям, и каждый сайт начинает выполнение алгоритма для дерева после получения сообщения <wakeup> от каждого соседа. Все процессы завершают алгоритм для дерева с одним и тем же значением оценки, а именно, с наибольшей оценкой сайта. Единственный сайт с такой оценкой закончит выполнение в состоянии
Через каждый канал пересылается по два сообщения <wakeup> и по два сообщения <tok,r>, откуда сложность сообщений равна 4N–4. В течение D единиц времени после того, как первый процесс начал алгоритм, каждый процесс послал сообщения <wakeup>, следовательно, в течение D+1 единиц времени каждый процесс начал волну. Легко заметить, что первое решение принимается не позднее, чем через D единиц времени после начала волны, а последнее решение принимается не позднее D единиц времени после первого, откуда полное время равно 3D+1.
Если порядок сообщений в канале может быть изменен (т.е. канал – не FIFO), процесс может получить сообщение (token, r) от соседа прежде чем он получил сообщение <wakeup> от этого соседа. В этом случае сообщение (token, r) может быть временно сохранено или обработано как сообщения (token, r), прибывающие позднее.
В алгоритме Лелана для распределенной системы с архитектурой кольца (ориентированного цикла) каждый инициатор вычисляет список идентификаторов всех инициаторов, после чего выбирается инициатор с наибольшей оценкой est(). Каждый инициатор посылает маркер, содержащий его идентификатор, по кольцу, и этот маркер передается всеми сайтами. Предполагается, что каналы подчиняются дисциплине FIFO, и что инициатор должен сгенерировать свой маркер до того, как он получит маркер другого инициатора (когда сайт получает маркер, он после этого не инициирует алгоритм).
Когда инициатор p получает свой собственный маркер, маркеры всех инициаторов прошли через p, и p выбирается лишь в том случае, если p имеет наибольшую оценку среди инициаторов. Напоминаем, что нужно различать внешнее и внутреннее обозначения сайтов. Здесь p и q – внешние обозначения. Они используются при необходимости процессами, выполняющимися на других сайтах. Собственный сайт p в своем процессе обозначается идентификатором this. При этом, разумеется, p и this имеют одно и то же значение (например, числовое или код). В приведенном ниже алгоритме переменная state задает состояние сайта.
Алгоритм Лелана:
var Listp : set of integer init {est(this)} ;
state: (sleep, coordinator, lost);
begin if this - инициатор then
begin state := cand ; send (token, this) to Nextp ; receive (token, q) ;
while q not equils this do
begin Listp := Listp join {q} ;
send (token, q) to Next_p ; receive (token, q) ;
end ;
if this = max (Listp) then state := coordinator
else state := lost
end
else repeat receive (token, q) ; send (token, q) to Nextp ;
if state = sleep then state := lost
until false
end
Так как порядок маркеров в кольце сохраняется (из предположения о каналах FIFO), и инициатор q отправляет (token, q) до того как получит (token, p), то инициатор p получает (token, q) прежде, чем вернется (token, p). Отсюда следует, что каждый инициатор p заканчивается со списком Listp, совпадающим с множеством всех инициаторов, и единственным выбираемым сайтом становится инициатор с наибольшей оценкой.
Все не-инициаторы приходят в состояние проигравший, но навсегда остаются в ожидании сообщений (token, r). Ожидание может быть прервано, если лидер посылает по кольцу специальный маркер, чтобы объявить об окончании выборов.
Алгоритм Чанга-Робертса, приведенный ниже, устраняет из кольца маркеры тех сайтов, для которых очевидно, что они проиграют выборы. В этом смысле он улучшает алгоритм Лелана. Т.е. инициатор p удаляет из кольца маркер (token, q), если est(q) < est(p). Инициатор p становится проигравшим, когда получает маркер с идентификатором q, таким что est(q) > est(p), или координатором, когда он получает маркер с идентификатором p.
var state : (sleep, coordinator, lost);
begin if this - инициатор then
begin state := cand ; send (token, this) to Nextp;
repeat receive (token, q) ;
if q = this then state := coordinator
else if est(this) < est(q) then
begin if state = cand then state := lost ;
send (token, q) to Nextp
end
until state = coordinator
end
else repeat receive (token, q) ; send (token, q) to Nextp ;
if state = sleep then state := lost
until false
end (* Только координатор может завершить выполнение программы.
Он передает сообщение всем сайтам, чтобы сообщить им свой идентификатор. *)
Пусть p0 – инициатор с наибольшим идентификатором. Все процессы являются либо не-инициаторами, либо инициаторами с идентификаторами меньшими p0, поэтому все процессы передают дальше маркер (token, p0), отправленный p0. Следовательно, p0 получает свой маркер обратно и становится выбранным.
Не-инициаторы не могут быть выбраны, так как все они приходят в состояние проигравший самое позднее, когда через них передается маркер p0. Инициатор p с оценкой est(p) < est(p0) не может быть выбран; p0 не передаст дальше маркер (token, p), поэтому p никогда не получит свой собственный маркер. Такой инициатор p приходит в состояние проигравший самое позднее, когда через него передается маркер (token, p0).
(рис 18.2) Иллюстрация к алгоритму Чанга-РобертсаНа рис. 18.2 изображен некоторый момент выполнения алгоритма Чанга-Робертса. На кольце расположены сайты. На внешней стороне кольца указаны их идентификаторы, на внутренней – величины оценок, на основе которых производится выбор (token, 2), переносящий номер сайта, для которого оценка имеет значение "31", стрелка указывает направление движения маркера. Начальный сайт при выполнении алгоритма указан звездочкой – это сайт 1 с оценкой est(1) = 24.
Во многих распределенных системах один из сайтов играет роль
В подобных случаях требуется выбор нового
Активные (функционирующие в данный момент) сайты должны est (
Максимальное значение нетрудно найти, если все локальные оценки собрать в одном месте. Но сложность заключается в том, что неясно, кто бы мог взять на себя сбор информации, а также зависимость процедуры сбора от архитектуры системы.
Алгоритм предназначен для динамического выбора
Сайты обмениваются сообщениями с тремя возможными значениями: "выборы", "ответ", "
Алгоритм выборов может начать любой сайт Si, который определил, что текущий SC не функционирует (например, если ему слишком долго приходится ожидать сообщения от
Алгоритм состоит из следующих шагов.
S_i рассылает сообщение "выборы" всем другим сайтам, имеющим большую оценку est(S_j), чем у него. Он ожидает, что они отправят ему сообщения "ответ".Si ответов длится не более чем время T. Если за это время ответы не получены, то сайт Si объявляет себя координатором и уведомляет об этом сайты с меньшей оценкой, чем est(Si) путем отправки им сообщений "Si ожидает еще некоторое ограниченное время прихода сообщения "Si начинает новые выборы.Si получает сообщение "Sj получает сообщение "выборы" и намерен участвовать в выборах, то он возвращает сообщение "ответ", после чего начинает новые выборы (напомним, его оценка est(Sj) больше, чем оценка est(Si) сайта, проводящего сейчас выборы).SC, то он начинает выборы. В том случае, если его оценка est(SC) является наивысшей, он объявляет себя координатором и сообщает об этом другим сайтам. Это происходит, несмотря на то, что какой-то сайт в период неработоспособности SC выиграл выборы и функционирует сейчас как
(рис 18.1) Пример выполнения алгоритма выбора "смещение"На рис. 18.1 изображены четыре шага выполнения алгоритма. Алгоритм начинается с того, что сайт S1 обнаружил, что сайт SC не выполняет свои функции S2 и S3. Те посылают сайту S1 "ответы" (шаг 1) и начинают собственные выборы (шаг 2). На рисунке предполагается, что оценки est сайтов увеличиваются слева направо.
Сайт S3 посылает "ответ" сайту S2, но сам дождаться ответа от SC не может, так как тот не функционирует. Поэтому S3 решает взять на себя функции
Тем временем истекает период ожидания сайтом S1 окончания выборов. Сообщения "ответ" он получил, а сообщение "C ) становится сайт S2.
Во всех приведенных ниже алгоритмах процесс на сайте p имеет переменную state с возможными значениями ( (проигравший). Иногда мы будем предполагать, что state имеет значение (спящий), когда p еще не выполнил ни одного шага алгоритма, и значение cand (кандидат), если p вступил в вычисление, но еще не знает, победил он или проиграл. Некоторые алгоритмы используют дополнительные состояния, такие как active, и др., которые будут указаны в самом алгоритме.
Важность уникальных идентификаторов в задаче выбора состоит в том, что они могут использоваться не только для адресации сообщений, но и для оценки сайтов. При разработке алгоритма выбора можно, например, потребовать, что сайт с наибольшей (или наоборот, с наименьшей) оценкой должен победить. Тогда задача состоит в поиске идентификатора с наибольшей оценкой с помощью децентрализованного алгоритма. В этом случае задачу выбора называют задачей поиска
Если топология распределенной системы – дерево или доступно
Когда сайт получит сообщение <wakeup> через каждый канал, он начинает выполнять алгоритм из лекции 12, который расширен таким образом, чтобы вычислять идентификатор сайта с наибольшей оценкой, и чтобы каждый сайт выполнял процедуру return(OK). Когда сайт выполняет эту процедуру, он знает идентификатор
В тексте алгоритма sent ("отправлено") используется, чтобы каждый сайт послал сообщения <wakeup> не более одного раза, а переменная counter (счетчик) используется для подсчета количества сообщений <wakeup>, полученных сайтом.
var is_sent : boolean init false ;
counter: integer init 0 ;
recp[q] : boolean для всех q принадлежащих Out(this) init false ;
m : integer init this ;
state : (sleep, coordinator, lost) init sleep ;
begin if this - инициатор then
begin is_sent := true ;
forall q in Out(this) do send <wakeup> to q
end ;
while counter < card(Out(this)) do
begin receive <wakeup> ; counter := counter + 1 ;
if not is_sent then
begin is_sent := true ;
forall q in Out(this) do send <wakeup> to q
end
end ;
(* Начало алгоритма из лекции 12 *)
while card{q : not recp[q]} > 1 do
begin receive (token, r) from q ; recp[q] := true ;
if est(r) > est(m) then m := r
end;
send (token, m) to q0 with not recp[q0] ;
receive (token, r) from q0 ;
if est(r) > est(m) then m := r; (* return(OK) с ответом m *)
if m = this then state := coordinator else state := lost ;
forall q in Out(this), q not equils q0 do send (token, m) to q
end
Когда хотя бы один сайт инициирует выполнение алгоритма, все сайты посылают сообщения <wakeup> всем своим соседям, и каждый сайт начинает выполнение алгоритма для дерева после получения сообщения <wakeup> от каждого соседа. Все процессы завершают алгоритм для дерева с одним и тем же значением оценки, а именно, с наибольшей оценкой сайта. Единственный сайт с такой оценкой закончит выполнение в состоянии
Через каждый канал пересылается по два сообщения <wakeup> и по два сообщения <tok,r>, откуда сложность сообщений равна 4N–4. В течение D единиц времени после того, как первый процесс начал алгоритм, каждый процесс послал сообщения <wakeup>, следовательно, в течение D+1 единиц времени каждый процесс начал волну. Легко заметить, что первое решение принимается не позднее, чем через D единиц времени после начала волны, а последнее решение принимается не позднее D единиц времени после первого, откуда полное время равно 3D+1.
Если порядок сообщений в канале может быть изменен (т.е. канал – не FIFO), процесс может получить сообщение (token, r) от соседа прежде чем он получил сообщение <wakeup> от этого соседа. В этом случае сообщение (token, r) может быть временно сохранено или обработано как сообщения (token, r), прибывающие позднее.
В алгоритме Лелана для распределенной системы с архитектурой кольца (ориентированного цикла) каждый инициатор вычисляет список идентификаторов всех инициаторов, после чего выбирается инициатор с наибольшей оценкой est(). Каждый инициатор посылает маркер, содержащий его идентификатор, по кольцу, и этот маркер передается всеми сайтами. Предполагается, что каналы подчиняются дисциплине FIFO, и что инициатор должен сгенерировать свой маркер до того, как он получит маркер другого инициатора (когда сайт получает маркер, он после этого не инициирует алгоритм).
Когда инициатор p получает свой собственный маркер, маркеры всех инициаторов прошли через p, и p выбирается лишь в том случае, если p имеет наибольшую оценку среди инициаторов. Напоминаем, что нужно различать внешнее и внутреннее обозначения сайтов. Здесь p и q – внешние обозначения. Они используются при необходимости процессами, выполняющимися на других сайтах. Собственный сайт p в своем процессе обозначается идентификатором this. При этом, разумеется, p и this имеют одно и то же значение (например, числовое или код). В приведенном ниже алгоритме переменная state задает состояние сайта.
Алгоритм Лелана:
var Listp : set of integer init {est(this)} ;
state: (sleep, coordinator, lost);
begin if this - инициатор then
begin state := cand ; send (token, this) to Nextp ; receive (token, q) ;
while q not equils this do
begin Listp := Listp join {q} ;
send (token, q) to Next_p ; receive (token, q) ;
end ;
if this = max (Listp) then state := coordinator
else state := lost
end
else repeat receive (token, q) ; send (token, q) to Nextp ;
if state = sleep then state := lost
until false
end
Так как порядок маркеров в кольце сохраняется (из предположения о каналах FIFO), и инициатор q отправляет (token, q) до того как получит (token, p), то инициатор p получает (token, q) прежде, чем вернется (token, p). Отсюда следует, что каждый инициатор p заканчивается со списком Listp, совпадающим с множеством всех инициаторов, и единственным выбираемым сайтом становится инициатор с наибольшей оценкой.
Все не-инициаторы приходят в состояние проигравший, но навсегда остаются в ожидании сообщений (token, r). Ожидание может быть прервано, если лидер посылает по кольцу специальный маркер, чтобы объявить об окончании выборов.
Алгоритм Чанга-Робертса, приведенный ниже, устраняет из кольца маркеры тех сайтов, для которых очевидно, что они проиграют выборы. В этом смысле он улучшает алгоритм Лелана. Т.е. инициатор p удаляет из кольца маркер (token, q), если est(q) < est(p). Инициатор p становится проигравшим, когда получает маркер с идентификатором q, таким что est(q) > est(p), или координатором, когда он получает маркер с идентификатором p.
var state : (sleep, coordinator, lost);
begin if this - инициатор then
begin state := cand ; send (token, this) to Nextp;
repeat receive (token, q) ;
if q = this then state := coordinator
else if est(this) < est(q) then
begin if state = cand then state := lost ;
send (token, q) to Nextp
end
until state = coordinator
end
else repeat receive (token, q) ; send (token, q) to Nextp ;
if state = sleep then state := lost
until false
end (* Только координатор может завершить выполнение программы.
Он передает сообщение всем сайтам, чтобы сообщить им свой идентификатор. *)
Пусть p0 – инициатор с наибольшим идентификатором. Все процессы являются либо не-инициаторами, либо инициаторами с идентификаторами меньшими p0, поэтому все процессы передают дальше маркер (token, p0), отправленный p0. Следовательно, p0 получает свой маркер обратно и становится выбранным.
Не-инициаторы не могут быть выбраны, так как все они приходят в состояние проигравший самое позднее, когда через них передается маркер p0. Инициатор p с оценкой est(p) < est(p0) не может быть выбран; p0 не передаст дальше маркер (token, p), поэтому p никогда не получит свой собственный маркер. Такой инициатор p приходит в состояние проигравший самое позднее, когда через него передается маркер (token, p0).
(рис 18.2) Иллюстрация к алгоритму Чанга-РобертсаНа рис. 18.2 изображен некоторый момент выполнения алгоритма Чанга-Робертса. На кольце расположены сайты. На внешней стороне кольца указаны их идентификаторы, на внутренней – величины оценок, на основе которых производится выбор (token, 2), переносящий номер сайта, для которого оценка имеет значение "31", стрелка указывает направление движения маркера. Начальный сайт при выполнении алгоритма указан звездочкой – это сайт 1 с оценкой est(1) = 24.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.