Равномерное распределение почтовых ящиков между серверами/базами, порекомендуйте алгоритм?
Здравствуйте,
подскажите пожалуйста алгоритм решения задачи по переносу ящиков между Exchange серверами.
Задача: есть Exchange сервера, которые выводятся из эксплуатации. На них достаточно большой объем данных (почтовых ящиков разного размера). Их нужно распределить по другим серверам с учетом:
Объем данных на всех серверах должен быть примерно одинаковым. Т.е. сервера A,B, C...Z должны иметь примерно одинаковое количество ящиков в базе и размер баз.
Например, каждый сервер должен иметь не более 200 ящиков/базе и суммарный размер базы не более 300 Gb. Желательно, чтобы распределение было бы равномерным, дельта по размеру 100 Mb. Не должно возникнуть ситуации, когда все маленькие ящики оказались в одной базе, а другую попал всего один, но "тяжелый".
В настоящий момент разные сервера имеют разную нагрузку, т.е. количество ящиков/базе разнится от севера к серверу.
Что пробовал: найти "средний вес" ящика и создать два массива. Один со значениями от среднего вниз, другой - от среднего вверх. Далее, выбирая по одному элементу из каждого массива заполнять базы, но получается неэффективно.
Мне кажется, что должен быть другой алгоритм распределения, более подходящий для подобных задач.
Stalker_RED, я согласен с Вами, возможно я могу увеличить дельту до 0,1% , но как понять насколько эта дельта эффективна? Я только могу предположить, что выше 0,1% подняться не смогу, т.к. на сервере по 15 баз, и 3 Gb в сумме это много, поскольку 2.4 Gb - размер обычного почтового ящика.
По Ваше ссылке задача несколько другая, чем моя. Там идет речь о равномерных "порциях", а в моем случае эти порции разные. Т.е. в моем случае, в одну корзину (bin) может лечь больший вес, в другую меньший.
Например, на сервере А есть 4 базы, в одной 150 Гб, в другой 200, в третьей и четвертой 295 Гб.
На сервере В другие четыре базы 300, 120, 200,300
Аналогично на других серверах.
Мне нужно "выровнять" корзины по весу и количеству элементов
zloy_zaya, если я верно понял задачу, нужно объединить все ящики в один массив, с которого по очереди брать их по одному и распределять по новым серверам. Таким образом, корзины будут заполнены и в конечном счете корзины будут иметь примерно одинаковый вес. https://swordfishwjy.github.io/2018/05/21/Bin-pack...
Можно поискать изображения по bin packing problem в Гугле и выбрать сайт с наиболее понятным объяснением.