2010-06-15 2 views
9

так вот моя проблема:Алгоритмы балансировки нагрузки и планирования

У меня есть несколько разных конфигурационных серверов. У меня разные расчеты (задания); Я могу предсказать, как долго будет выполняться примерно каждая работа. Кроме того, у меня есть приоритеты. Мой вопрос заключается в том, как сохранить все машины, загруженные на 99-100%, и запланировать работу наилучшим образом.

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

Как я могу распределить рабочие места (расчеты) наилучшим образом, учитывая приоритеты?

Любые предложения, идеи или алгоритмы?

FYI: Моя платформа .NET.

+0

Что с этим связано? Я ничего не вижу из точки выбора алгоритма, которая на самом деле зависит от использования .NET. Алгоритмы - по определению - независимы от langauge. – TomTom

+0

Не имеет значения, является ли algo в .NET или нет :) Я только что упомянул, что я работаю с .NET, поэтому, возможно, есть некоторые функциональные возможности уже в рамках или около того :) –

+0

@Lukas Я столкнулся с аналогичным проблема на данный момент. Вы когда-нибудь находили хорошее решение? –

ответ

0

Похоже, что это очень мало связано с .NET.

Но подумайте о своих машинах как «рабочих потоках», создайте «пул» доступных машин, заказанных на доступном CPU (или другом важном ресурсе), а затем используйте свои знания о каждой задаче, чтобы подтолкнуть каждую работу к наилучшей оборудованной машине ,

Если вы знаете все задания заранее, вы, вероятно, можете использовать алгоритм «наилучшего соответствия», чтобы запланировать их в правильном порядке на правильных машинах. Вы также можете посмотреть алгоритмы «режущего инструмента»; http://en.wikipedia.org/wiki/Cutting_stock_problem ...

+0

** Appliedalgo.com ** - это сделано, потому что заново изобрести колесо, когда вы можете купить его для usd500, планирование/отслеживание выполнения/балансировка нагрузки все –

+0

Это может быть очень дешево купить, в зависимости от финансирования. Но учтите, что именно этот пакет - «только 64-разрядная Windows 7 или выше» (согласно их веб-сайту). –

+0

Он может загружать задания баланса даже на Java, но только на 64-битной Windows. –

2
  1. Посмотрите на Dryad linq. Это уже в академическом выпуске и может быть полезным.
  2. Win HPC server - корпоративное решение для распределенных вычислений от Microsoft.
  3. code samples, который может помочь в построении балансировки нагрузки путем анализа счетчиков производительности.
  4. Microsoft имеет StockTrader образец приложения (с источниками), который является примером распространяемой SOA с ручной балансировкой нагрузки RoundRobin.
0

Microsoft недавно опубликовала paper на своем планировщике quincy. Если вы просто оптимизируете использование ЦП, то очень простой решатель может найти глобальный оптимум. Если вам нужна оптимизация по большему количеству осей, то, очевидно, проблемное пространство будет более сложным.

Насколько велика ваша группа? Как вы справляетесь с оптимизацией по случаям сбоев? Они имеют значение? Есть ли в IO? Имеет ли данные сродство к диску? Есть ли более одного места для запуска части работы? Все, что нужно учитывать.

1

В качестве альтернативного подхода вы можете использовать оценки максимального значения производительности каждой машины для планирования заданий. Это может быть очень эффективным только в том случае, если вы рассматриваете производительность выполнения системы с балансировкой нагрузки. С этим подходом пренебрегают вопросами, касающимися ввода-вывода, размера кластера, производительности сети, типа модели памяти и т. Д. Взгляните на http://dx.doi.org/10.1145/1513895.1513901

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