На сегодняшний день разделение ресурсов и виртуализация имеет огромное значение в промышленности. Существует огромное количество методов разделения вычислительных ресурсов. Я не буду углубляться в каждую технологию, а только постараюсь рассказать об основных видах и принципах. Статья будет скорее посвящена для тех «кто в танке». Те кто уже знаком с этим и уж тем более использует в своей деятельно не найдут ничего нового. Попробуем…
Чистое железо (Bare metal)
В данном разделе нет никакого принципа разделения ресурсов. Все используется по классике: есть компьютер, на него установлена операционная система, далее ставятся какие-то приложение. И на этом все. Каждое приложение выполняет свою задачу, ОС выдает какие-то ресурсы этим приложения. В данном случае требуется «голая» система, на которую уже устанавливается все остальное.
Давайте приведем немного аналогии. Представим себе, что физический компьютер — это большой диван. Если взять несколько таких компьютеров, то это будет несколько диванов.
Виртуализация
Вот тут начинается более интересное движение. Смысл в том, что создается виртуальный компьютер, на который устанавливается полноценная ОС со своим ядром и приложениями. В данном случае на одном физическом компьютере можно создать несколько виртуальных компьютеров и они будут работать совместно. Конечно нужно учитывать количество ресурсов чтобы их хватило, но это дает возможность «нарезать» большое количество ресурсов на несколько меньшее количество. За счет такой схемы можно установить совершенно разные операционные системы на один компьютер и они будут работать параллельно. Это называется Гипервизор.
Стоит отметить поддержку такой виртуализации аппаратным обеспечением. Если «железо» не имеет такой поддержки, то сделать такую установку можно, но работать это будет крайне медленно. Очень многие современные процессоры умеют так делать.
Чтобы понять как это работает давайте посадим людей на этот диван. Люди бывают разные: толстые, худые, высокие, маленькие… В зависимости какой человек имеет комплекцию, столько он займет место на диване. Таким образом виртуальные машины могут иметь разное количество ресурсов в своем распоряжении.
Контейнеризация
В случае контейнеров все работает немного иначе. Здесь нет никаких гипервизоров, аппаратной поддержки железа или чего-то еще. Все работает прямо в операционной системе. Но эта операционная система должна поддерживать такой вид изоляции. Да, в данном случае это уже изоляция, но она очень удобна в том, что можно нарезать ресурсы более тонко между приложениями и системами, при этом каждое приложение может получить в свое распоряжение свой набор настроект и утилит. Например, хостовая ОС может быть Debian, а внутри контейнера работать CentOS или Alpine.
По сути конейнерные ОС не имеют ядра, а пользуются ядром хостовой ОС. По этому контейнеры являются практически такими же ОС, что и главная, на которую это все устанавливается. Для такого типа разделения ресурсов не обязательно иметь аппаратную поддержку виртуализации. Все и так работает.
Попробуем представить как это выглядит. У нас есть все тот же диван, на котором сидят разные люди. Контейнер будем представлять в виде коробки, в которой что-то есть. Эти коробки бывают разного размера. Если дать эти коробки людям, то кто-то может взять их больше, а кто-то меньше. Но есть один момент — коробки можно поставить прямо на диван. В таком случае контейнеры будут работать прямо на голом железе. И так делать можно! Все зависит от задачи.
Изоляция
С точки зрения использования практически ничем не отличается от Контейнеризации, но все же определленные отличия имеются. Так изолированные приложения работают на той же ОС, что и хост. Так если хостовоая ОС является Ubuntu, то и приложение будет работать на Ubuntu. Просто приложение, как бы, «изолируется» от других и взаимодействие с «внешним миром» устанавливается какими-то правилами.
Чтобы представить как это работает, то представим себе пакетик, а в него мы положим что-то. Это и будет изоляция. Соответственно можно положить на диван, а можно раздать людям. Можно положить и в коробку, но такое редко практикуется.
А для чего все это нужно?
Очень резонный вопрос. Суть в том, что бывают задачи, которые нужно изолировать друг от друга. Например, у Вас есть блог, сайт, интернет-магазин или вы просто хотите попробовать другую ОС. Может даже провести какие-то эксперименты, которые потом не нужны и их можно удалить. Бывают программы, которые требуют определенного рабочего окружения и оно не совместимо с текущим или другими программами. Может Вам нужно просто изолировать свои сервисы друг от друга. Например, вы строите домашний сервер и хотели бы сервисы изолировать друг от друга чтобы ими было удобно управлять. На самом деле причин может быть очень много, так что в данной теме есть из чего выбрать.
Послесловие
Я хотел объяснить достаточно сложную тему простыми словами на сколько это возможно. На самом деле эта тема очень сложная, так как есть очень много подводных камней. Надеюсь я смог дать понять основной смысл всего этого «безобразия»…