Разделение данных по партиям на основе производительности (балансировка нагрузки)

87
10

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

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

Example 1:
We get a zip with 1,000 images
System #1: 3 s/img
System #2: 6 s/img
Since sys1 is 50% faster, it should receive double the data.
Sys1 receives: 667 images
Sys2 receives: 333 images

Я делаю это в python, что было бы уравнением, чтобы взять список чисел и разделить пакет # на основе веса? Ex. Получать веса = [4.1, 7.3, 2.5] и img_count = 5000?

спросил(а) 2021-01-19T15:52:28+03:00 2 месяца, 3 недели назад
1
Решение
62

Вам просто нужно рассчитать, сколько работы может производиться единичным весом, а затем умножить вес на единицу работы. Вот пара строк в python.

w = [4.1, 7.3, 2.5]
total = 5000

unit = total / sum(w)
res = [unit * i for i in w]
print res // [1474.820143884892, 2625.8992805755397, 899.2805755395684]

В конце делайте что-нибудь с округлением, и у вас есть то, что вы хотите

ответил(а) 2021-01-19T15:52:28+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема