Разработка и реализация централизованного алгоритма балансировки для ВС с произвольной топологией. Реализация фазового алгоритма
Постановка задачи:
Разработать децентрализованный алгоритм балансировки. В этом случае процессы, выполняющиеся на вычислительном узле, при обнаружении чрезмерной загрузки переносят объекты со своего процессора на соседние (по выходу). Предварительно соседние узлы получают сообщения о дополнительной загрузке и пересчитывают нагрузку на своих вычислительных узлах, затем посылают сообщения соседним узлам по выходу. Сеть имеет произвольную топологию и является ориентированной. Схема сети прилагается.
Рекомендации по выполнению
Предположим, что распределенное приложение представляет собой взаимодействующие процессы, располагающиеся на различных вычислительных узлах.
При выполнении работы использовать программные средства технологии .Net. при передаче сообщений следует использовать службу передачи сообщений (описание в лабораторной работе №3).
Децентрализованный алгоритм балансировки описан в первой лабораторной работе
При выполнении работы рекомендуется использовать фазовый волновой алгоритм.
Фазовый алгоритм
Фазовый алгоритм является децентрализованным алгоритмом для произвольных ориентированных графов. Двунаправленные связи тоже могут присутствовать, но они должны быть заданы парой параллельных встречных однонаправленных каналов (дуг графа). Алгоритм требует, чтобы процессам на сайтах был известен диаметр d графа, либо его оценка сверху.
Переменные в тексте алгоритма имеют следующий смысл.
counter_out – счетчик, подсчитывающий количество маркеров token, посланных каждому из соседей по выходу. Если таких соседей у некоторого сайта, например, три, то за каждой единицей счетчика стоит три посланных маркера – по одному на каждого соседа.
counter_in – массив счетчиков, по одному счетчику на каждого соседа по входу. Хранит количество маркеров, посланных соседями.
this – сайт, процесс которого исполняет данный алгоритм.
Out() – множество вершин, смежных по выходу.
u – некоторый сайт, передавший маркер.
Функция min, примененная к массиву, выбирает из него минимальный элемент.
var counter_in: array [0..d] of integer init 0; counter_out: integer init 0 ; begin if this - инициатор then begin for in Out(this) do out token to r ; counter_out := counter_out + 1 end; while min(counter_in) < d do begin receive token from u ; counter_in [u] := counter_in [u] + 1 ; if (min(counter_in) >= counter_out) & (counter_out < d) then begin for r in Out(this) do out token to r ; counter_out := counter_out + 1 end end ; return(OK) end
Алгоритм может использоваться в ориентированных сетях произвольной топологии, где каналы могут передавать сообщения только в одном направлении. В этом случае, соседи s являются соседями по входу (процессы, которые могут посылать сообщения s ) и соседями по выходу (процессы, которым s может посылать сообщения).
В фазовом алгоритме каждый процесс посылает ровно d сообщений каждому соседу по выходу. Только после того, как k сообщений было получено от каждого соседа по входу, (k + 1) -ое сообщение посылается каждому соседу по выходу.
Отчетность:
В результате выполнения лабораторной работы должны быть представлены следующие материалы:
- Программа;
- Исходные тексты;
- Презентация работы;
- Презентация, в которой освещаются вопросы реализации алгоритма балансировки