Задать вопрос
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется

Как правильно распределить задачи в зависимости от нагрузки?

Здравствуйте. В двух словах есть массив (пусть 1000 элементов) и в нем группы и их статистика по нагрузке в % соотношении:
group_id1 - 0.2%
group_id2 - 5%
group_id3 - 61%
...
group_id1000 - 3%

т.е. в общем сумма % всех 1000 элементов будет 100

Задача распределять по нагрузке эти 1000 групп на 30 серверов. Т.е. по сути задача распределить эти 1000 групп в массив из 30 элементов.
Пока даже идей нет как подойти к задаче. Есть идеи?)

UPD: есть группы нагрузка которых порой равна 60% от общей. значит их обработку нужно в этот момент вынести на отдельный сервер. соответственно тупо раскидать - не получится.
UPD 2: так же есть группы, которые вообще ничего не потребляют по сути, а значит можно огромную кучу вынести на 1 сервер. и пусть они там отдыхают
  • Вопрос задан
  • 211 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 2
longclaps
@longclaps
Ты не поверишь.
Если задачи просто случайно раскидывать по серверам - в среднем максимальная нагрузка на сервер не превысит 5% от общей.
Вот пруф.
from random import random, randint

N, M = 1000, 30
tasks = [random() for _ in range(N)]
w = sum(tasks)
for i in range(N):
    tasks[i] /= w
servers = [0.] * M
for t in tasks:
    servers[randint(0, M - 1)] += t
print(min(servers), max(servers))
Ответ написан
angrySCV
@angrySCV
machine learning, programming, startuping
если нет никаких особых свойств и закономерностей, а вся нагрузка распределена случайно по группам то уверен можно по порядку распределять, раздавая по порядку каждому серверу свою задачу. Все равно в среднем будет средняя нагрузка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Я предполагаю, что это задача об очередях сообщений (MQ). В смысле, что имея множество задач, их можно ставить в очередь(и). Так, множество обработчиков очереди (worker) будут брать задачи из очереди и обрабатывать их. Обработав задачу, берут следующую. И так со множества серверов. При этом общая нагрузка между серверами должна быть равномерной. Как я понимаю, ⚡ Kotobotov ⚡ имел в виду этот сценарий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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