contact@jetteam.dev
Компетенции и кейсы/Данные, ML и компьютерное зрение
NDAкомбинаторная оптимизация

Оптимизация размещения виртуальных машин на серверах

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

Контекст

Размещение виртуальных машин вручную и по простым правилам оставляет большой запас: серверы загружены неравномерно, а платить приходится за все.

Ключ к плотной упаковке – профили нагрузки: машины с непересекающимися пиками можно ставить рядом, машины с одинаковыми – нельзя.

схема

Что меняет плотная упаковка

БЫЛО: 6 СЕРВЕРОВСТАЛО: 4 СЕРВЕРА60 %60 %44 %46 %50 %22 %90 %88 %74 %30 %Виртуальные машины описаны как многомерные объекты по CPU, RAM, диску и сети. Генетический алгоритм ищет плотную упаковку, не нарушая SLA.
Соседями становятся машины, пики нагрузки которых расходятся по времени.
из проекта

Результат оптимизации

Автоэнкодер сжимает историю утилизации в короткое представление, в котором машины разделяются на профили нагрузки.
Автоэнкодер сжимает историю утилизации в короткое представление, в котором машины разделяются на профили нагрузки.
Результат упаковки в трёх измерениях: каждый параллелепипед – виртуальная машина в пространстве CPU, RAM и диска.
Результат упаковки в трёх измерениях: каждый параллелепипед – виртуальная машина в пространстве CPU, RAM и диска.

Что входило в задачи

Соседями становятся машины с разными пикамиплотность даёт учёт профилей нагрузки: рядом ставятся машины, чьи пики расходятся во времени

  • История утилизациисбор и анализ реальных данных по машинам
  • Четыре измеренияCPU, RAM, диск и сеть – машина и сервер как многомерные объекты
  • Профили нагрузкикластеризация машин по форме потребления
  • Генетический алгоритмпоиск плотной упаковки в пространстве ограничений
  • Карта размещениясовместимость и SLA входят в задачу жёсткими условиями

Стек проекта

Pythonгенетические алгоритмыscikit-learnpandasPostgreSQL

Есть похожая задача?

contact@jetteam.dev