Продолжение. Начало здесь.
Существуют три наиболее часто используемых варианта виртуализации IT-инфраструктуры:
- Виртуализация серверов;
- Виртуализация приложений;
- Виртуализация представлений.
В случае виртуализации серверов речь идет об имитации аппаратного обеспечения компьютера с помощью специального ПО. То есть, создаются виртуальные машины (ВМ), которые полностью аналогичны физическим машинам. Каждая ВМ имеет собственное «железо», воссозданное программными средствами, и свою операционную систему.
Во втором случае речь идет о запуске отдельного приложения в изолированной среде, так называемом «контейнере». То есть, на физической или виртуальной машине можно запустить несколько экземпляров одного итого же приложения или разные приложения, которые при неизолированном запуске могут конфликтовать между собой. В этом кейсе все запущенные приложения совместно используют одно и то же железо и одну и ту же ОС.
При виртуализации представлений само приложение полностью работает на сервере, а клиент видит только интерфейс этого приложение. Наиболее ярким примером являются терминальные службы Windows Server (например, Удаленный рабочий стол).
Далее мы подробнее рассмотрим первые два варианта виртуализации.
Виртуализация с использованием ВМ
Виртуальная машина – это ПО, которое воссоздает (эмулирует) реальную машину со всеми ее компонентами (процессор, жесткий диск, оперативная память и т.д.) на хостовой машине. Для этого на хостовой машине должен быть установлен гипервизор - ПО, которое объединяет все физические ресурсы хостовой машины (или нескольких машин, если они объединены в кластер) и эмулирует при помощи них «железо» виртуальной машины.
Существует два типа гипервизоров:
- Гипервизоры первого типа запускаются непосредственно на железе хостовой машины и не требуют установки какой-либо операционной системы;
- Гипервизоры второго типа работают с железом хостовой машины через установленную ОС.
Наиболее популярными гипервизорами являются VMware ESXi, Kernel-based Virtual Machine (KVM) и Microsoft Hyper-V.
Плюсы и минусы виртуальных машин
Плюсы:
- Они позволяют запустить несколько разных ОС на одной машине;
- Они жестко изолируют запускаемые приложения от приложений, запускаемых на других ВМ, и приложений хостовой машины, обеспечивая более высокий уровень безопасности, чем, например, в случае с контейнерами;
- Можно строго задать объем доступных ВМ ресурсов. То есть, вне зависимости от нагрузки ВМ будут доступны те ресурсы, которые были ей выделены при создании. Это может быть как преимуществом, позволяющим справлять с пиковыми нагрузками, так и недостатком, из-за которого выделенные ресурсы могут не использоваться с максимальной эффективностью.
- Виртуальные машины представляют собой набор файлов. Поэтому в отличие от инфраструктуры на реальном оборудовании, их гораздо проще перемещать и копировать.
Минусы:
- Виртуальные машины включают в себя гостевую операционную систему, драйверы, приложения и зависимости, из-за чего их размер может составлять от нескольких сотен мегабайт до нескольких гигабайт,
- Для их работы требуется значительные ресурсы ОЗУ и ЦП (это связано, прежде всего, с необходимость эмулировать «железо» для этих машин);
- Включение виртуальной машины (загрузка ОС и инициализация приложения) занимает значительное время;
- Миграция виртуальных машин между центрами обработки данных или в облако – достаточно сложная процедура.
Виртуализация с использованием контейнеризации
Познакомимся с понятием "контейнер" поближе. Он может находиться в одном из двух состояний (неработающем и работающем), из-за чего данным термином можно обозначить сразу две вещи.
В неработающем состоянии контейнер это набор файлов, хранящихся на диске. В этот набор файлов входят код одного или нескольких запускаемых приложений, необходимые для работы приложений системные библиотеки, переменные среды и файлы конфигурации.
В работающем состоянии контейнер превращается в процесс (программа, работающую в фоновом режиме без участия пользователя), который по API обращается к ядру ОС. Этот API-вызов обычно приводит к дополнительной изоляции файлов контейнера и созданию их копий, с которыми и работает ОС.
Плюсы и минусы контейнеров
Контейнеризация обладает следующими преимуществами:
- Контейнер требует меньше дискового пространства, т.к. обычно не хранит в себе ОС и общесистемные компоненты. При необходимости ОС может входить в состав контейнера, но в этом случае все равно потребуется меньше дискового пространства, т.к. все контейнеры на физической машине будут использовать одни и те же файлы;
- Быстрое развертывание за счет использования готовых шаблонов контейнеров;
- Возможна работа с небезопасным кодом, благодаря тому, что каждый контейнер изолирован от других;
- При увеличении нагрузки можно быстро развернуть несколько копий контейнеров и перераспределить нагрузку между ними;
- Загрузка и инициализация контейнера также происходит быстрее;
- Контейнер для поддержания своей работы требует гораздо меньше системных ресурсов, т.е. хостовая машина может с легкостью поддерживать работу нескольких контейнеров, но с трудом справится с поддержкой нескольких виртуальных машин.
Среди минусов контейнеров можно выделить следующее:
- Поддержание работоспособности (операционная сложность) столь разветвленной инфраструктуры может быть очень высокой;
- Большинство контейнерных технологий основаны на технологиях Linux-контейнеров. Поэтому запуск контейнеров в среде Microsoft приводит к дополнительным трудозатратам и затратам вычислительных мощностей;
- Контейнеры - относительно новая технология на рынке. Если у вас есть какая-то проблема, может понадобиться некоторое время, чтобы выяснить решение.
Подводя итоги, можно сделать вывод, что целью применения виртуальной машины является полная эмуляция операционной среды, тогда как цель применения контейнера – сделать приложения переносимыми и самодостаточными. Итоговая таблица плюсов и минусов использования ВМ и контейнеров может выглядеть следующим образом.