Опубликован: 23.05.2008 | Доступ: свободный | Студентов: 1569 / 396 | Оценка: 4.80 / 4.10 | Длительность: 15:29:00
Специальности: Программист
Самостоятельная работа 3:

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

Аннотация: Волновой алгоритм Финна и его реализация для передачи сообщений в сети. Использование службы очередей сообщений для передачи сообщений от узла к узлу

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

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

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

Рекомендация: при выполнении работы использовать программные средства технологии .Net.

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

Для передачи сообщений в сети следует реализовать волновой алгоритм

Алгоритм Финна

Алгоритм Финна – еще один волновой алгоритм, который можно использовать в ориентированных сетях произвольной топологии. Он не требует того, чтобы диаметр сети был известен заранее, но подразумевает наличие уникальных идентификаторов процессов. В сообщениях передаются множества идентификаторов процессов, что приводит к довольно высокой битовой сложности алгоритма.

Процесс сайта s содержит два множества идентификаторов процессов, Inc(s) и NInc(s). Неформально говоря, Inc(s) – это множество процессов u таких, что событие в u предшествует последнему произошедшему событию в s, а NInc(s) – множество процессов u таких, что для всех соседей r процесса u событие в r предшествует последнему произошедшему событию в s. Эта зависимость поддерживается следующим образом. Изначально Inc(s) = {s}, а NInc(s) = \varnothing. Каждый раз, когда одно из множеств пополняется, процесс s посылает сообщение, включая в него Inc(s) и NInc(s). Когда s получает сообщение, включающее множества Inc(s) и NInc(s), полученные идентификаторы включаются в версии этих множеств в процессе s. Когда s получит сообщения от всех соседей по входу, s включается в NInc(s). Когда два множества становятся равны, s выполняет процедуру return(OK). Из неформального смысла двух множеств следует, что для каждого процесса u такого, что событие в u предшествует некоторому событию e, выполняется следующее: для каждого соседа r процесса u событие в r также предшествует событию e.

Рекомендации по выбору инструментальных средств.:

Для передачи сообщений от узла к узлу рекомендуется использовать службу очередей сообщений:

Служба очередей сообщений

MSMQ— это приложение, гарантирующее надежную посылку и получение сообщении. Сообщения могут быть всем, чем угодно, начиная от XML-файлов и заканчивая наборами записей ADO и документами Microsoft Word. Не имеет значения, что посылать MSMQ, важно знать, что все, что поступило в очередь, будет с гарантией доставлено.

Необходимость MSMQ должна проявляться на этапе разработки приложения. Ее нельзя добавить после, так как очередь является стержнем надежного отключенного приложения. Ниже приведено несколько факторов, указывающих на необходимость MSMQ в приложении:

  • прямые вызовы между клиентами и серверами по соединениям могут завершитьсянеудачей. Механизм MSMQ позволяет избежать такой ситуации;
  • сообщения могут быть посланы очередям, когда ресурсы недоступны, к примеру, это другие очереди, и получены, когда ресурсы вновь становятся доступными;
  • сообщения имеют приоритеты: заказы продуктов доставляются раньше, чем журнальные файлы или другие неважные ресурсы.
  • MSMQ на 100% поддерживает транзакции, поэтому она может быть частью транзакции СОМ+, поддерживает механизм доставки "все или ничего";
  • доступ к MSM.Q основан на Windows Security, что гарантирует работу в защищенной среде.

Настройка MSMQ

Перед началом разработки приложения, использующего MSMQ необходимо убедиться, что данная служба установлена на компьютере, так как MSMQ не устанавливается по умолчанию. Проверить доступность компонента можно одним из двух способов:

  1. Щелкнуть правой кнопкой по ярлыку "Мой компьютер" и в контекстном меню выбрать пункт "Управление". В результате выполненного действия будет запущена консоль "Управление компьютером". В дереве консоли в разделе "Службы и приложения" вы должны увидеть раздел "Очередь сообщений". Если соответствующее поддерево открывается без сообщений об ошибке, значит, компонент установлен в системе и нормально функционирует.

  2. В окно "Server Explorer" Visual Studio .NET необходимо открыть узел Servers. В списке доступных сервисов должен присутствовать раздел "Messages Queues", в котором должны присутствовать разделы Public Queues, PrivateQueues и Journal Queues.

Если данные процессы завершаются сообщениями об ошибке, необходимо установить MSMQ. Для этого нужно открыть "Панель управления", выбрать пункт "Программы и компоненты", затем перейдите по ссылке "Включение или отключение компонентов Windows". В списке компонентов выберите "Message Queues", нажмите "OK" и служба будет установлена.


После инсталляции MSMQ убедитесь в работоспособности компонента приведенными выше способами.

Приложение может вести поиск нужной ему очереди по ряду критериев. Это возможно при использовании механизма общих очередей в Microsoft Message Queuing, что требует развертывания Microsoft Active Directory.

Название Тип Описание
Public Queue >Очереди пользователя Очереди, которые копируются по всей сети и доступны для других машин
Private Queue Очереди, доступные только на локальной машине
Administration Queue Содержит подтверждения посылки сообщений по сети
Response Queue Содержит сообщения ответа, возвращаемые посылающим приложением, когда сообщение получено приложением назначения
Journal Queue >Системные очереди Хранит копии посланных сообщений, а также копирует сообщения, удаляемые из очереди
DeadLetter Queue Хранит копии сообщений, которые не удается доставить или срок хранения которых в очереди истек
Report Queue Содержит маршруты, которым следовали сообщения
Private System Queue Содержит административные и уведомляющие сообщения, которые должна обработать система

После создания (или программно, или с помощью Computer Management) очередь существует до тех пор, пока не будет удалена или явно через Computer Management, или вызовом метода Delete для ее объекта. Фактически, очередь можно создать, чтобы она существовала вечно, служа удобным хранилищем для сообщений. После того, как сообщения пересланы очереди, они живут там до тех пор, пока не будут прочитаны или удалены. Прочитанное сообщение автоматически удаляется из очереди. Еcли чтение сообщения является частью транзакции, которая завершается неудачей, сообщение возвращается в очередь. Если нужно узнать, какие сообщения имеются в очереди, в нее можно подсмотреть, не читая их (а, значит, оставляя их в очереди). При работе с приватными очередями, создавая объект, следует указывать имя очереди. При попытке доступа к очередям по сети можно воспользоваться методами перечисления, возвращающими доступные очереди, и, основываясь на полученных свойствах, обратиться к определенной очереди.

Для программного доступа очередям сообщений необходимо указать ссылку на сборку System.Messaging в пункте меню "Project|Add Reference…".


Дмитрий Полянский
Дмитрий Полянский
Ольга Космодемьянская
Ольга Космодемьянская

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