Я занимаюсь разработкой бэкенда для движка машинного обучения. Мы используем Python и Flask. Я также использую gunicorn и nginx для производственного сервера.
Среда
На сервере одновременно выполняется много задач с интенсивным использованием ЦП. Они могут создавать дочерние процессы и пытаться использовать ЦП еще больше (большинство задач не созданы мной, я не контролирую их использование ЦП внутри кода). Сервер имеет 128 ГБ ОЗУ и 32 ядра, хотя в большинстве случаев он занят на 100%.
К счастью, дизайн бэкэнда позволяет мне распределять задачи по другим машинам, не влияя на пользовательский интерфейс.
Тест
Я также успешно протестировал модульную конструкцию, используя несколько виртуальных машин. Я выполнил несколько задач два раза, один раз без виртуализации, и снова с этим. Результатом стало более быстрое выполнение почти всех задач модульного дизайна, за исключением некоторых длинных задач. Похоже, что операционная система не заботится о размере моих задач (на самом деле она не знает разницы между некоторыми жадными процессорами Python задач) и не распределяет между ними ресурсы обработки.
Вопрос
Полезно ли использовать виртуализацию или нанимать несколько других машин в облаке для выполнения задач? Этот вопрос касается доверия операционной системы и gunicorn к управлению параллелизмом, распределению ресурсов и приоритетов задач.
было бы неплохо ...
Мой собственный выбор используя виртуализацию или облачные машины, хотя я не уверен, исходит ли это предпочтение от работы, которую я проделал для модульного дизайна, или она действительно лучше. Кроме того, руководство стремится продолжать работу с текущей системой, поэтому у меня должны быть веские причины для замены текущей машины, которую мы наняли, на несколько машин с более низкими характеристиками (общая стоимость моего решения ниже, чем текущий счет, который оплачивает компания, хотя общая стоимость спецификация наемных машин будет выше).