Опубликован: 23.05.2008 | Уровень: специалист | Доступ: платный
Самостоятельная работа 2:

Разработка и реализация централизованного алгоритма балансировки для ВС с произвольной топологией. Реализация волнового алгоритма "Эхо"

Аннотация: Волновой алгоритм "Эхо" и его реализация для рассылки сообщений в сети. Метод прохода по графу "поиск в ширину"

Постановка задачи:

Разработать централизованный алгоритм балансировки. Решение о переносе объекта с одного вычислительного узла распределенной системы на другой выполняется одним из процессов, который предварительно получает сообщения от всех вычислительных узлов об их загрузке. Сеть имеет произвольную топологию и является ориентированной. Схема сети прилагается.

Рекомендации по выполнению

Предположим, что распределенное приложение представляет собой взаимодействующие процессы, располагающиеся на различных вычислительных узлах. Поскольку алгоритм централизованный, то будем считать, что существует сервер, которые рассылает сообщение всем другим компьютерам в сети, что они должны сообщить о своей загрузке. Затем, получив от всех компьютеров нужную информацию, сервер принимает решение о балансировке.

При выполнении работы использовать программные средства технологии .Net.

Централизованный алгоритм балансировки приведен в первой лабораторной работе

Для рассылки сообщений в сети следует реализовать волновой алгоритм "Эхо".

Алгортм "Эхо"

Алгоритм "Эхо" может работать для любой топологии распределенной системы, в. нем имеется один инициатор.

Алгоритм использует метод прохода по графу, называемый "поиск (или просмотр графа) в ширину", описанный, в частности, в учебнике Л.Н.Королева, А.И.Микова "Информатика. Введение в компьютерные науки" для поиска множества R достижимых вершин из данной вершины start.

Метод состоит в том, чтобы продвигаться от начальной вершины по ширине всего фронта, включив сначала в множество R все вершины, смежные с вершиной start, затем смежные со смежными и так далее. В описанном ниже методе Expand(R) расширения множества R множество Out(R) – это множество всех вершин, смежных с вершинами из R, так сказать, достижимых за один шаг. В частности, может оказаться, что все они уже принадлежат R и тогда дальнейшее расширение невозможно. На этом процесс прекращается.

Expand(R):
  begin
    if Out(R)  R then  
      begin Out(R) => R;
         Expand(R)
      end
  end;

Первый вызов – Expand(Out(start)) ; Предполагается, что O ut(\varnothing ) = \varnothing , \varnothing \subseteq  \varnothing.

В алгоритме "Эхо" инициатор посылает маркеры всем своим соседям. Любой сайт s (не инициатор), получивший первый раз маркер от одного из своих соседей (обозначим этого соседа pre ), рассылает маркеры всем соседним сайтам, кроме того, от которого получил маркер. Соседи поступают точно так же. Волна удаляется от инициатора.

Дальнейший процесс рассмотрим на примере дерева. Волна доходит до некоторых из висячих вершин. Висячей вершине отправлять маркер дальше некуда. Тогда она возвращает его той вершине, от которой получила (вот оно "эхо"). Вершины, получившие "эхо" от своих соседей, возвращают маркеры своим вершинам pre. Те, в свою очередь, генерируют "эхо" своим предшественникам. Наконец "эхо" доходит до инициатора. Инициатор, получив "эхо" от всех своих соседей, выполняет процедуру return(OK).

Ниже приведен распределенный алгоритм, состоящий из описаний процесса вычислений для сайта – инициатора и описаний процессов для сайтов – не-нициаторов. В тексте описания процесса тот сайт, на котором этот процесс выполняется (свой сайт), обозначен идентификатором this (в традициях языка Симула-67). Множество Out(this) – это множество сайтов, смежных по выходу с сайтом this, т.е. тех сайтов, на которые с сайта this можно отправить сообщения по однонаправленным или двунаправленным каналам связи. Функция card( ) задает число кардинальности (мощность) множества, являющегося аргументом этой функции. Переменные, встречающиеся в текстах процессов – локальные (по экземпляру для каждого процесса): обмен информацией между процессами происходит только посредством сообщений, разделяемые переменные отсутствуют. Начальные значения счетчиков counter равны 0.

begin for u in Out(this) do out token to u ;
  while counter < card(Out(this)) do
     begin receive token; counter := counter + 1 end ;
  return(OK)
end ;
2.1. Процесс для инициатора:
begin receive token from u ; pre(this) := u ; counter := counter + 1 ;
  for (u in Out(this))&(u ≠ pre(this)) do out token to u ;
  while counter < card(Out(this)) do
     begin receive token; counter := counter + 1 end ;
  out token to pre(this)
end
2.2. Процессы для не-инициаторов:

Отчетность

В результате выполнения лабораторной работы должны быть представлены следующие материалы:

  1. Программа;
  2. Исходные тексты;
  3. Презентация работы;
Дмитрий Полянский
Дмитрий Полянский
Ольга Космодемьянская
Ольга Космодемьянская

Я прошла курс "Распределенные системы и алгоритмы". Сдала экзамен экстерном и получила диплом. Вопрос: можно ли после завершения теста посмотреть все вопросы, которые были на экзамене и все варианты ответов? Мне это необходимо для отчета преподавателю в моем ВУЗе. Заранее спасибо!

Дарья Назарова
Дарья Назарова
Австралия
Artem Bardakov
Artem Bardakov
Россия