Предполагая, что один односокетный сервер Xeon D, 8 ядер, 16 потоков, два интерфейса 10G SFP +, 64 ГБ ОЗУ, два SSD ...
Пакет приложений, который включает nginx, MariaDB, некоторую логику приложения и, возможно, Redis. ОС будет FreeBSD или Fedora Server.
Имеет ли какое-либо преимущество развертывание нескольких избыточных виртуальных машин, каждая из которых содержит полный пакет, по сравнению с запуском одного экземпляра пакета на «голом железе» без виртуализации?
Можете ли вы предсказать разницу в производительности или пропускной способности сети? Увеличивает ли емкость совместное использование сетевых адаптеров несколькими виртуальными машинами? Я имею в виду какую-то аппаратную виртуализацию SR-IOV или подобное. Может ли сетевая карта обрабатывать больше подключений, если она виртуализирована?
Не лучше ли иметь только один экземпляр эксплойта приложения и напрямую управлять оборудованием?
(Предположим, что в качестве хоста и гостя в случае виртуализации используется одна и та же ОС. Я предполагаю, что использую KVM с Fedora.)
Спасибо.
Это простой вопрос: «Какова длина веревки?». Зависит от вашей строки; мы понятия не имеем, как долго ваш. Как говорит @ewwhite, проведите небольшое тестирование. Если это чисто теоретический / академический вопрос, значит, вы задаете не тот сайт.
Практическое правило - конечно, «голое железо» должно превосходить набор виртуальных машин на том же оборудовании, потому что виртуализация требует некоторых накладных расходов, хотя и минимальных. А гигабитная сетевая карта может передавать только 1 Гбит / с, виртуализация этого не меняет.
Но есть множество особенностей реализации, которые могут означать ваш приложение будет не лучшим образом.
Если ваше приложение является однопоточным, а центральным процессором является ваше место (в отличие от ОЗУ или ввода-вывода), то вы не сможете использовать большую часть своего оборудования. Предполагая, что он может масштабироваться, а не увеличиваться, просто сделайте его набором виртуальных машин и получите целую группу виртуальных машин с одним процессором. (Или, может быть, двухпроцессорные виртуальные машины.)
Или могут быть ограничения, с которыми вы можете столкнуться в одной ОС (максимальное количество открытых файловых дескрипторов, эфемерные порты TCP, я уверен, что есть и другие), которые ограничат потенциальную пропускную способность и, таким образом, распределяют нагрузку на несколько виртуальных машин на этом оборудовании. может помочь вам пройти через это. Это не узкое место в производительности в качестве таких но это узкое место, которое устраняет виртуализация.
Также могут быть причины управления, по которым виртуальные машины предпочтительнее. Виртуальные машины легче запускать и останавливать автоматически, чем на «голом железе», особенно если вы не владеете «голым железом» (хостинг / облачные провайдеры); часто виртуальные машины могут иметь больше смысла, даже если они не работают так же хорошо, как теоретически базовое оборудование.