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

таким образом, вот моя проблема:

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

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

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

Какие-либо предложения, идеи или алгоритмы?

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

9
задан Lukas Šalkauskas 15 June 2010 в 15:12
поделиться

3 ответа

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

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

0
ответ дан 5 December 2019 в 01:42
поделиться
  1. Посмотрите Dryad linq . Он уже в академической версии и может быть полезен.
  2. Win HPC server - корпоративное решение для распределенных вычислений от Microsoft.
  3. Некоторые образцы кода , которые могут помочь в построении балансировки нагрузки путем анализа счетчиков производительности.
  4. У Microsoft есть пример приложения StockTrader (с исходными кодами), который является примером распространяемой SOA с написанной вручную балансировкой нагрузки RoundRobin.
2
ответ дан 5 December 2019 в 01:42
поделиться

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

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

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

0
ответ дан 5 December 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: