Я ищу хорошие практические правила, чтобы понять, когда НЕ виртуализировать машину.
Например, я знаю, что процесс, полностью привязанный к ЦП с почти 100% -ной загрузкой, вероятно, не является хорошей идеей для виртуализации, но есть ли смысл запускать что-то, что большую часть времени использует ЦП в «значительной степени» (скажем, 40 или 50%)?
Другой пример: если я виртуализирую 1000 машин, даже если они используются слабо или умеренно, вероятно, было бы плохо запускать все это на хосте с 4 ядрами.
Может ли кто-нибудь обобщить намеки на виртуализацию на основе рабочей нагрузки машины или количества гостевых машин по сравнению с ресурсами хоста?
Обычно я виртуализирую хосты Windows с помощью VirtualBox или VMWare, но я предполагаю, что это довольно общий вопрос.
То, что я бы никогда не вставил в виртуальную машину:
Все, что использует определенное оборудование, которое не может быть виртуализировано: обычно графика, довольно много аппаратных модулей безопасности, все, что имеет настраиваемые драйверы (например, сетевые драйверы специального назначения).
Системы с проблемами лицензии. Некоторое программное обеспечение взимает плату за физический процессор или ядро, независимо от того, сколько вы выделили виртуальной машине. Вы бы попали в аудиторскую проверку, если бы у вас было программное обеспечение, лицензированное для одного ядра, работающего в виртуальной машине на 32-ядерном сервере.
Вещи, которые я бы не рекомендовал вставлять в виртуальную машину:
Программное обеспечение, которое уже пытается использовать все ресурсы стандартного оборудования. Машины, работающие в рамках системы «больших данных», такие как hadoop, обычно предназначены для работы на «голом железе».
Все, что будет тонко настроено для использования ресурсов. Когда вы действительно начинаете настраивать базу данных, виртуальные машины, борющиеся за ресурсы, действительно могут помешать работе.
Все, что уже имеет большое узкое место. Он уже плохо работает сам с собой, он вряд ли будет хорошо работать с другими.
Есть несколько замечательных вещей для установки в виртуальные машины:
Все, что довольно много времени проводит без дела. Хосты служебных программ, такие как почта и DNS, с трудом создают достаточную нагрузку на современное оборудование, чтобы гарантировать выделенные серверы.
Приложения, которые плохо (или легко) масштабируются сами по себе. Устаревший код довольно часто попадает в эту категорию. Если приложение не расширяется, чтобы занять сервер, используйте множество маленьких виртуальных серверов.
Проекты / приложения, которые начинаются с малого, но растут. Гораздо проще добавить ресурсы к виртуальной машине (а также перейти на более новое и мощное оборудование), чем запускать на «голом железе».
Кроме того, я не уверен, что вы преувеличиваете по поводу размещения огромного количества виртуальных машин на одном хосте, но если вы пытаетесь добиться большого соотношения виртуальных машин: HW, вы можете вместо этого рассмотреть ESX, Xen, KVM. Вы добьетесь большего успеха, чем при использовании VMware или виртуального бокса в Windows.
Дисковая подсистема. Обычно это наименее распространенный ресурс. Память, конечно, но та очевидная.
Ограничения дисковой подсистемы действуют в обоих направлениях. Если система использует много дискового ввода-вывода, другие гости замедляются. Если этот гость находится в рабочей среде, вероятно, ему потребуется быстрый ответ на веб-запросы. Это может быть очень неприятно, а также является серьезной причиной, почему не арендовать виртуальное оборудование. Вы можете свести к минимуму эту проблему, используя выделенные диски.
При использовании только 512 МБ памяти в гостях весь дисковый кеш помещается на хост. И он не разделен поровну между гостями.
Не беспокойтесь о процессоре ввода-вывода. Таким образом, виртуализация очень эффективна, часто это связано с тем, что в одной системе выполняется только несколько процессов. Я редко вижу мульти-xeon-системы, работающие на CPU на 100%.
изменить: опечатки
Есть два аспекта производительности виртуализации.
Кто еще находится на том же железе, что касается общих узких мест? Если вы находитесь в виртуальной среде, вы очень сильно зависите от честности хостинга с вами.
Я думаю, что главный вопрос, который нужно задать для чистой производительности (особенно интерактивности), - какие части системы виртуализации эмулируются. Это зависит от настройки. Диск и сеть - типичные кандидаты. Как показывает практика, эмуляция удваивает «стоимость» производительности при выполнении действия, поэтому любое время задержки оборудования следует учитывать вдвое, а любое число пропускной способности следует уменьшать вдвое.
В конечном счете, никакая высокопроизводительная нагрузка не должна виртуализироваться. Превышение производительности виртуализации нетривиально. Смотрите результаты моих тестов здесь:
https://altechnative.net/virtual-performance-or-lack-thereof/
OTOH, если вы хотите консолидировать несколько машин, которые в основном все время простаивают, виртуализация - это путь вперед.
Хороший ответ от anttiR.
Кроме того, критичные по времени системы. Я просто понял, что гниение копейки Hyper-V (vm медленно отстает, все современные ОС в vm делают это, часто обновляются) не очень хорошо работает с некоторыми критичными по времени приложениями, которые я разрабатываю. Кроме того, я собираюсь использовать там "много" ЦП и планирую получить 12-ядерный компьютер только для этого приложения в производстве.