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

Балансировка нагрузки в распределенных системах

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

RCL – cтратегия переноса нагрузки

Рассмотрим три алгоритма динамического переноса нагрузки, предложенные разработчиками SPEEDES:

  • случайный алгоритм (random, R);
  • алгоритм, основанный на коммуникациях (communication, С);
  • алгоритм, основанный на вычислении нагрузки (load, L).

Будем в дальнейшем называть эти алгоритмы балансировки RCL-стратегией.

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

  • Распределённая система является гетерогенной.
  • Пользователь может интерактивно взаимодействовать с машиной в любой момент времени.
  • Количество вычислительных узлов в сети ограничено.
  • Возможно изменение сети.
  • Задержки на коммуникацию в сети остаются неизменными.
  • Издержки на перенос нагрузки с одного на другой процессор соизмерим с физическими размерами этой нагрузки.

RCL стратегия использует двухуровневый процесс принятия решений, который объединяет централизованный и децентрализованный подходы. Двухуровневый процесс принятия решений предполагает:

  • Центральный процесс-координатор принимает решение о переносе нагрузки,
  • Каждый отсылающий сообщения процесс ответственен за выбор нагрузки, которую следует перенести.

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

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

Действия первого уровня

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

  • Количество нагрузки ( Ld ).
  • Количество времени, потраченное процессором на обработку приложений SPEEDES ( TAppS ).
  • Количество нагрузки, которая была обработана с момента последнего переноса( LdM ).

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

  • Дисперсию коэффициента загрузки компьютера ( VarCLd );
  • Общее количество нагрузки, ожидающей обслуживания ( TotalWLd );
  • Дисперсию нагрузки, ожидающей обслуживания( VarWLd ).

Дисперсия коэффициенты загрузки компьютера может свидетельствовать о том, насколько они загружены. Действительно, если какие-либо компьютеры выполняют несколько приложений вместе с приложениями SPEEDES в то время, как другие простаивают, значение дисперсии может быть велико. Чем больше величина дисперсии использования компьютера, тем менее эффективно используются ресурсы процессоров.

Общее количество нагрузки, ожидающей обслуживания – это сумма всех невыполненных работ на каждом из компьютеров. Если их количество мало, то выигрыша от балансировки может и не быть, поскольку накладные расходы на перенос нагрузки могут превысить выигрыш от балансировки. Это особенно ярко выражено, если нагрузка невелика.

Дисперсия нагрузки, ожидающей обслуживания ( VarWLd ). Дисперсия нагрузки, ожидающей обслуживания вычисляется для каждого компьютера. Большое значение этого показателя свидетельствует об отсутствии равномерной нагрузки на компьютеры. Этот показатель используется в качестве вторичного критерия, если дисперсия общей нагрузки ниже порогового значения ( T ). Указанную метрику ( VarWLd ) используют в процедуре (назовём её Decide() ), которая выполняется перед процедурой переноса ( Migrate() ). Метрика нужна для принятия решения о переносе нагрузки.

На первом шаге процедуры Decide() выполняют сравнение между общим количеством ожидающей обслуживания нагрузки( TotalWLd ) и указанным пороговым значением ( T ). Если значение TotalWLd выше, то вычисляется коэффициент загруженности компьютера. Если дисперсия коэффициента загрузки выше соответствующего порога ( VarCLd > TLd ), то выполняется процедура ( Migrate() ). В противном случае Migrate() на этом шаге не выполняется. В конце выполнения процедуры Decide(), центральный координатор посылает сообщение всем компьютерам о том, что они могут продолжить обработку своих локальных нагрузок, если в процедуре Migrate() нет необходимости.

Если необходимость в процедуре Migrate() есть, центральный координатор посылает сообщение о том, что ожидается выполнение этой процедуры. Далее происходит определение посылающего и принимающего компьютеров ( Csender и Сreceiver ). Опираясь на показатель скорости обработки, (например, отношение количества нагрузки, обработанной на локальном компьютере к общему количеству обработанной нагрузки на всех процессорах со времени последнего переноса.) центральный координатор перераспределяет оставшуюся необработанную нагрузку. Например, если компьютер обрабатывал 10% общего количества нагрузки после последнего выполнения Migrate(), он возьмёт 10% процентов ещё необработанной нагрузки. Следовательно, те рабочие станции, которые обработали большее количество нагрузки, получат опять большее её количество. Если слишком большой нагрузки нет, и скорость работы компьютеров остаётся неизменной, все компьютеры законча т свою работу примерно в одно и то же время.

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

И, наконец, центральный координатор выполняет подготовку к переносу объектов, если этот перенос необходим. Таким образом, процедуры второго уровня выполняются лишь при необходимости выполнения процедуры Migrate().

Действия второго уровня

Действия второго уровня охватывают все рабочие станции распределённой системы. Конкретной количество нагрузки посылается с одной рабочей станции на другую. Основные действия связаны с выбором нагрузки, её упаковкой, инициализацией переноса, переносом нагрузки, распаковкой, изменением глобальной информации. Каждый логический процесс в SPEEDES состоит из количества объектов моделирования ( N ) и очереди событий ( e_{i}, i=1 \div  n ). События помещаются в очередь событий в неубывающем порядке их временных меток.

Нагрузка определяется как вся работа, которая должна быть выполнена для обработки запланированных событий, находящихся в очереди. Поскольку SPEEDES должна модифицировать нагрузку для переноса её части, каждому типу событий назначается коэффициент сложности ( ki ) в интервале от 1 до 10. Пользователь должен назначить коэффициент сложности для каждого определённого им события. Чем ближе коэффициент сложности к 10, тем больше времени требуется на обработку события. Нагрузка, ожидающая обслуживания, вычисляется исходя из количества событий, находящихся в очереди и их коэффициентов сложности ( LocalWLd = \sum  e_{i} \times k_{i}, i=1 \div  n ).

К примеру, предположим, что моделируемый объект содержит два события типа 1 и два события типа 2 в очереди событий. Если коэффициент сложности равен 4 для события типа 1 и 8 для события типа 2, то нагрузка может быть определена следующим образом: (2*4)+(3*8)= 32. Перенос нагрузки предполагает перенос объектов с одного компьютера на другой. Для выбора объектов, которые следует перенести на другой компьютер, используют один из трёх алгоритмов. Это случайный алгоритм, основанный на коммуникациях и основанный на вычислении нагрузки.

Случайный алгоритм

Случайный алгоритм (R) заключается в случайном выборе объектов моделирования на посылающем компьютере (Csender). Выбор продолжается до тех пор, пока количество выбранных объектов не будет соответствовать заданному числу.

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

Алгоритм, основанный на коммуникациях

Посылающий компьютер выбирает локальные объекты, которые наиболее часто обмениваются информацией с принимающим компьютером. Этот подход может сократить время на коммуникацию между двумя логическими процессами. Но он требует больших накладных расходов, поскольку на каждом компьютере должна быть таблица коммуникаций, в которой отмечается частота обменов каждого объекта, находящегося на Csender с другими компьютерами. Таблица должна всё время обновляться. Кроме того, для выбора объекта с целью его переноса следует использовать алгоритмы сортировки и поиска. Известно, что алгоритмы линейного поиска и сортировки при большом количестве объектов время выполнения этих алгоритмов может быть значительным. .

Алгоритм, основанный на вычислении нагрузки

Алгоритм, основанный на вычислении нагрузки, пытается минимизировать количество выбранных для миграции объектов. Во время миграции объекты моделирования сортируются в зависимости от их нагрузки (количество событий каждого типа, умноженное на коэффициент их сложности). Первым выбирают объект с максимальной нагрузкой.

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

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

Реализация

Стратегия динамического переноса нагрузки RCL была разработана для SPEEDES с целью повышения её производительности. Были проведены эксперименты для выявления конкретных параметров, которые влияют на скорость выполнения имитационного эксперимента. В качестве такого параметра может быть рассмотрен интервал между переносами нагрузки (между процедурами Migrate() ). SPEEDES поддерживает несколько синхронизирующих алгоритмов для выполнения распределённого моделирования: Breathing Time Warp (BTW), который совмещает черты алгоритма деформации времени Time Warp и протокола Breathing Time Buckets.

В результате исследований было обнаружено, что процедуру Migrate() следует выполнять в конце цикла GVT (Global Virtual Time). Действительно, события удаляются из системы во время вычисления GVT. Поэтому нет опасности, что возникнет необходимость в откате, который затронет только что перенесённую нагрузку. Более того, необходимо перенести только события и переменные мигрирующих объектов, а данные, связанные с откатом, не надо переносить, поскольку очередь откатов очищается в конце цикла GVT.

Каждый из алгоритмов был протестирован на трёх наборах входных данных. При этом варьировалась внешняя нагрузка. Результаты экспериментов показали, что процедуры миграции могут дать положительный эффект в различных условиях моделирования – при различных нагрузках.

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

  • Для всех трёх стратегий время выполнения сокращается, если интервал между процедурами Migrate() невелик.
  • Частота выполнения процедуры Migrate() влияет на время моделирования существенным образом.
  • При сравнении параллельного выполнения с переносом нагрузки и без него видно, что процедура переноса существенно влияет на скорость выполнения эксперимента.
< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Дмитрий Полянский
Дмитрий Полянский
Ольга Космодемьянская
Ольга Космодемьянская

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