Планировщик наименьшей нагрузки - PullRequest
1 голос
/ 09 февраля 2012

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

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

Это должен быть простойвопрос сортировки списка по текущему количеству активных задач, но так как я буду сортировать список несколько раз в секунду (среднее время работы для задачи меньше 25 мс), я боюсь, что это может быть серьезным узким местом.Таким образом, существует простая версия получения работника с наименьшим количеством задач без необходимости сортировки снова и снова.

РЕДАКТИРОВАНИЕ : задачи передаются рабочим через открытое соединение TCP,Поскольку зависимости между задачами довольно сложны (исключительное использование ресурсов), допустим, что все задачи назначены для начала.Как только задача возвращается от работника, все задачи, которые больше не блокируются, ставятся в очередь, и новая задача переносится на работника.Рабочая очередь никогда не будет пустой.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Как насчет этой системы:

  • Рабочий достигает конца своей очереди задач
  • Рабочий запрашивает больше задач у балансировщика нагрузки
  • Балансировщик нагрузки назначает N задач (где N, вероятно, больше 1, возможно, 20-50, если эти задачи очень малы).

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

0 голосов
/ 09 февраля 2012

Я думаю, что вам нужно предоставить больше информации о системе:

Как вы получаете задание для работника? Рабочий просит или это толкают? Как вы знаете, если работник не работает, или даже сколько он делает? Как моделируются физические устройства?

Что вы хотите сделать, так это избегать отслеживания чего-либо и найти более пассивный способ распространения работы.

...