Posts Tagged алгоритмы
сумасшедший алгоритм
Posted by John Lepikhin in Performance, программирование on November 16th, 2009
Уже 3-й день размышляю над алгоритмом следующей задачки.
Дано:
- Есть кластер. В кластере живёт несколько узлов. В узле живёт несколько веб-серверов. В веб-сервере живёт несколько аккаунтов. В аккаунте живёт несколько сайтов.
- Для каждого сайта известна текущая нагрузка. Соответственно, известна нагрузка для каждого из аккаунтов.
- Известно количество сайтов в каждом из аккаунтов.
- Для каждого аккаунта сказано, на скольких минимум узлах (не веб-серверах) он должен присутствовать. Пусть это будет μ.
- Для каждого аккаунта известно, какие веб-серверы обрабатывают его в данный момент.
Задача состоит в том, чтобы перераспределить аккаунты по веб-серверам так, чтобы
- Аккаунты с максимальной нагрузкой присутствовали на максимальном числе узлов. Ну и соразмерно все остальные.
- Каждый аккаунт представлен минимум на μ узлах.
- В пределах одного узла каждый аккаунт представлен лишь один раз.
- Текущая нагрузка наиболее равномерно распределена между всеми узлами (или с каким-то коэффициентом — не суть).
- Сайты максимально равномерно распределены между всеми веб-серверами, чтобы минимизировать объём памяти каждого из процессов веб-серверов.
- Сделать это всё так, чтобы изменения коснулись по возможности минимального количества веб-серверов, чтобы затем минимум их пришлось заставить перечитывать конфиг.
- Делать это каким-то хитрым алгоритмом т.к. простой перебор на потенциальные десятки тысяч сайтов может отожрать немало проца и памяти…
Понятно, что идеально соблюсти все условия не получится. Соответственно, надо либо расставить приоритеты условиям, либо ввести коэффициент максимальной допустимой погрешности решения. Решение вырастает весьма объёмным даже для простого перебора. Мне страшно представить о часе, когда надо будет искать более изящные решения.