Алгоритмы балансировки и планирования нагрузки - PullRequest
9 голосов
/ 15 июня 2010

вот моя проблема:

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

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

Есть ли предложения, идеи или алгоритмы?

К вашему сведению: Моя платформа .NET.

Ответы [ 4 ]

2 голосов
/ 15 июня 2010
  1. Посмотрите на Дриада Линк . Это уже в академической версии и может быть полезно.
  2. Win HPC server - корпоративное решение для распределенных вычислений от Microsoft.
  3. Некоторые примеры кода , которые могут помочь в построении балансировки нагрузки путем анализа счетчиков производительности.
  4. Microsoft имеет StockTrader пример приложения (с источниками), который является примером распространяемого SOA с рукописным балансировкой нагрузки RoundRobin.
1 голос
/ 01 июля 2011

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

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

0 голосов
/ 15 июня 2010

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

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

0 голосов
/ 15 июня 2010

Похоже, это имеет мало общего с .NET.

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

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

...