Виртуализация/контеризация

Все начинается с упаковки

В промышленной разработке есть необходимость «упаковки» собранного приложения, например, чтобы его можно было передать на тот сервер, где оно будет работать, в том виде, в каком разработчик собрал его у себя на компьютере, такая «упаковка» должна служить как бы защитой. Это исключает сюрпризы, вроде тех, когда во время теста приложение работает, а при переносе в рабочую среду — ломается. Так же «упаковка» изолирует одно приложение, от другого, находящееся на том же самом сервере, такая изоляция позволяет одному приложению не мешать работе другого (например: одно приложение не сможет забрать себе всю оперативную память сервера, оставив второе приложение на произвол судьбы). Особенно заметны плюсы «упаковки» при микросервисной архитектуре, оно и понятно, много микросервисов – много небольших приложений, которые должны общаться между собой, но при этом не должны мешать друг другу. В пример можно привести комод (сервер), в котором много разных ящиков, и мы можем спокойно перекладывать разные носки из одного ящика в другой, и при этом они не будут смешиваться ни друг с другом, ни с труселями.

Упаковка создается средствам виртуализации. Когда-то давно, в качестве «упаковки» использовались виртуальные машины (VM). Олды вспомнят как разворачивали Windows XP на Vista на виртуальной машине. Сейчас VM для упаковки приложений - это прошлый век. Мир захватили контейнеры. Потому что они: легче, производительнее и безопаснее.

Преимущества контеризации

  • простота и гибкость развертывания приложений по сравнению с ВМ;

  • непрерывность создания, интеграции и развертывания контейнера с возможностью быстро откатить изменения;

  • создание контейнеров приложений в процессе сборки/релиза и отделение приложения от аппаратной инфраструктуры;

  • идентичность среды разработки и тестирования на сервере и терминалах разработчика (ноутбуках, ПК);

  • возможность переносить приложения между облаками и ОС — Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine и т.д.;

  • разделение приложений на изолированные, распределенные, гибкие микросервисы с динамическим развертыванием и управлением.

Источники:

Last updated