Системные контейнеры, так же известные как контейнеры операционных систем представляют собой близкие аналоги виртуальных машин. Самое важное отличие от обычных виртуальных машин в том, что вместо гипервизора, они используют пространство имен (namespaces) и средства ограничения ресурсов ядра операционной системы (как правило Linux) для виртуализации и изоляции по ресурсам.

image

С момента появления технологии контейнерной виртуализации внимание пользователей к ней привлекали лучшая производительность и плотность размещения виртуальных сред по сравнению с традиционными гипервизорами. И сегодня, когда инфраструктура контейнеров уже доказала свою состоятельность для размещения даже критически важных нагрузок, имеет смысл поговорить о том, какие именно приложения могут получить самые значительные преимущества от работы в контейнерах.

Контейнеры, виртуальные машины, серверы – кто быстрее?


В маркетинговых листовках можно часто встретить заявления, что контейнеры могут быть «такими же быстрыми, как и физические серверы». С одной стороны, это близко к действительности, так как виртуализация и изоляция контейнеров требует минимум ресурсов физических серверов для работы — по крайней мере по сравнению с виртуальными машинами.

Однако это однобокое утверждение – рассматривающее только один фактор из множества. К примеру, в отдельных ситуациях контейнеры и виртуальные машины могут показать более высокую производительность, чем физические серверы, на которых они запущены. Мы видели ситуации, когда множественные копии одного и того же приложения, запущенные просто на физическом сервере, показывают меньшую производительность, чем при загрузке в несколько контейнеров или виртуальных машин, но с одним и только одним приложением внутри.

Подобные результаты связаны со многими факторами – такими как технологии де-дупликации одинаковых участков памяти в контейнерах или виртуальных машинах; лучшая эффективность дискового кэша и локальность NUMA (так называемой архитектуры с неравномерной памятью) – когда виртуализация может привязать контейнер к одному NUMA узлу и получив большую производительность в результате.

Кроме того, современные гипервизоры создают сравнительно небольшую нагрузку на процессор, в частности, благодаря аппаратной поддержке, реализованной на уровне процессора, количество дополнительных процедур, выполняемых гипервизоров для обслуживания ВМ, оказывается небольшим. Поэтому, если вы запустите какое-то приложение на отдельном компьютере и на виртуальной машине с правильно настроенным гипервизором отличия скорее будут незначительными по всем категориям — производительность ЦП, памяти, хранилища данных и сети.

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

Реальные условия


image

Перед вами график теста производительности, в котором создается несколько групп виртуальных серверов, в которых запускаются набор приложений, каждое со своей уникальной нагрузкой (т.н. Consolidation Stack Unit (CSU)). Каждый сервер в группе выдает свои результаты, такие как количество транзакций в секунду. Потом мы суммируем эти данные, чтобы получить общий результат для каждой технологии виртуализации, сравнивая ситуации, когда эти приложения запускаются на одном и том же «железе» — но с использованием различных средств виртуализации. В данном случае мы сравниваем возможности виртуальных машин и системных контейнеров, а увеличение количества CSU дает нам возможность сравнить работу этих технологий при разных уровнях нагрузки.

Как вы можете видеть, до момента пиковой производительности контейнеры и виртуальные машины показывают очень близкие результаты, разница в производительности ограничивается единицами процентов. Однако, когда дело доходит до полной загрузки процессора, отличия становятся очевидными. Если у центрального процессора не остается свободных циклов, он не может выделить время для обслуживания гипервизора без ущерба приложению, и поэтому производительность экосистемы виртуальных машин перестает расти раньше, чем экосистемы контейнеров. Далее происходит следующее: виртуальные машины первыми исчерпывают системную память. Дело в том, что ВМ представляют собой «черный ящик» для гипервизора, в то время как в случае контейнеров содержимое прозрачно и операционная система может воспользоваться иначе неиспользуемой памятью, а также убрать дубликаты (копии файлов, загруженных в память многократно). Поэтому контейнеры в отличие от виртуальных машин не показывают снижения производительности с дальнейшим ростом количества CSU (безусловно, до определенного предела).

Вот еще один тест, на отличия еще более очевидны. Так называемый, сценарий “DVD-store” напоминает по характеру нагрузки vConsolidate, но работа идет с приложением электронного магазина.

image

Здесь мы видим еще более заметные отличия, которые объясняются особенностью конкретного приложения. Конечно, далеко не во всех случаях разница между контейнерами и виртуальными машинами будет столь разительной. К факторам, обеспечивающим лучшую производительность контейнеров по сравнению с виртуальными машинами, можно добавить еще несколько:

Во-первых, контейнеры обеспечивают максимально быстрый запуск системы – буквально за доли секунды. И это очень важно для микросервисов, которые постоянно запускаются, уничтожаются и создаются заново. Также этот фактор оказывает положительное влияние на любые гранулярные нагрузки, в рамках которых можно запускать нагрузки для решения небольших задач.

Во-вторых, системные контейнеры Virtuozzo OS обладают уникальной функцией “pfcache”. Проще говоря система обеспечивает объединение идентичных файлов из разных контейнеров в момент их загрузки в память. В результате происходит одновременно снижение общего потребления оперативной памяти и повышение производительности ввода/вывода за счет лучшего кеширования – поскольку в кэше приходится держать меньше копий файлов, система может держать больше уникальных файлов – ускоряя доступ к ним.

Но не все контейнеры одинаковы. В частности, по данным тестов системные контейнеры Virtuozzo 7 демонстрируют максимальную плотность по сравнению с любым другим решением для виртуализации Linux – на несколько процентов выше чем предыдущая версия (Virtuozzo 6) и примерно в два раза выше чем виртуальные машины на основе KVM. Для нас это крайне важно – производительность платформы – это одна из основных причин почему наши клиенты выбирают Virtuozzo вместо других платформ. Несколько процентов может превратиться в серьезные суммы, когда речь идет о площадках в тысячи серверов – поэтому наша цель всегда показывать производительность лучше, чем аналоги, на всех приложениях и системах включая Windows.

Сценарии из реальной жизни


Можно выделить несколько сценариев где использование системных контейнеров, и в частности, наших новых контейнеров Virtuozzo 7 может показать максимальные преимущества:

Сценарий 1. Контейнеры крайне полезны, когда серверы работают на максимальной нагрузке, особенно если к 100% приближается не только утилизация ресурсов процессоров, но и оперативной памяти. На самом деле это очень типичный случай при запуске систем анализа данных или пакетной обработки информации. И если вы не оставляете резервной производительности для пиковых нагрузок, контейнеры помогут «выжать» максимум из имеющегося оборудования.

Сценарий 2. Вы запускаете множественные копии одного и того же или похожих приложений. В этом случае pfcache может значительно улучшить работу всей экосистемы, освобождая память и оптимизируя процессы ввода/вывода.

Сценарий 3. При запуске многопоточных веб-северов, а также при создании множества виртуальных процессоров (значительно превышающих количество физических) для разных виртуальных машин происходит постоянная смена контекста. Обработка мелких запросов пользователей и переключение процессора на обработку задач разных ВМ оказывается требовательной к ресурсам и снижению производительности в случае с традиционными ВМ.

Сценарий 4. Наличие мелких задач в большом количестве, работающих одновременно, и конкурирующих за ресурсы. В этом случае каждая виртуальная машина будет создавать свою дополнительную нагрузку на память (для загрузки ядра и структур гипервизора). И чем больше будет отдельных процессов, тем больше польза от применения контейнеров ОС.

Курс на эффективность


Не во всех случаях контейнеры дают принципиальные преимущества, но в своем спектре задач они действительно серьезно превосходят возможности гипервизоров с виртуальными машинами. Они полезны для микросервисов, многокомпонентных веб-приложений, задач анализа данных и других сфер применения с высокой гранулярностью и нагрузкой.

Более того, мы продолжаем улучшать характеристики Virtuozzo Containers, и версия 7 позволила улучшить как плотность размещения контейнеров, так и производительность на том же оборудовании. Обновление ядра Linux для решений Virtuozzo позволило изначально встроить в решение такие инструменты как CRIU для живой миграции контейнеров или Kpatch для обновления ядра без остановки работы сервисов. Так что к преимуществам системных контейнеров, как технологии в целом, сегодня добавляются новые, уникальные возможности, которые делают их еще более интересным решением для реальных бизнес-задач.
Поделиться с друзьями
-->

Комментарии (0)