Системные контейнеры, также известные как контейнеры операционной системы, являются близкими аналогами виртуальных машин.
Самым важным отличием от обычных виртуальных машин является то, что вместо гипервизора они используют пространства имен и инструменты ограничения ресурсов ядра операционной системы (обычно Linux) для виртуализации и изоляции ресурсов.
С момента появления технологии контейнерной виртуализации пользователей она привлекала за счет более высокой производительности и плотности виртуальных сред по сравнению с традиционными гипервизорами.
И сегодня, когда контейнерная инфраструктура уже доказала свою пригодность для размещения даже критически важных рабочих нагрузок, имеет смысл поговорить о том, какие приложения могут получить наиболее существенные преимущества от работы в контейнерах.
Контейнеры, виртуальные машины, серверы — кто быстрее?
В рекламных листовках часто утверждается, что контейнеры могут быть «такими же быстрыми, как физические серверы».С одной стороны, это близко к реальности, поскольку виртуализация и изоляция контейнеров требуют для работы минимум ресурсов физического сервера — по крайней мере, по сравнению с виртуальными машинами.
Однако это одностороннее утверждение – учитывая лишь один фактор из многих.
Например, в определенных ситуациях контейнеры и виртуальные машины могут показывать более высокую производительность, чем физические серверы, на которых они работают. Мы видели ситуации, когда несколько копий одного и того же приложения, работающие просто на физическом сервере, показывают меньшую производительность, чем при загрузке в несколько контейнеров или виртуальных машин, но с одним и только одним приложением внутри.
Такие результаты связаны со многими факторами, например с технологиями дедупликации одинаковых участков памяти в контейнерах или виртуальных машинах; лучшая эффективность кэша диска и локальность NUMA (так называемая неоднородная архитектура памяти) — когда виртуализация может привязать контейнер к одному узлу NUMA и в результате получить лучшую производительность.
Кроме того, современные гипервизоры создают относительно небольшую нагрузку на процессор; в частности, благодаря аппаратной поддержке, реализованной на уровне процессора, количество дополнительных процедур, выполняемых гипервизорами для обслуживания ВМ, невелико.
Поэтому, если вы запускаете приложение на отдельном компьютере и на виртуальной машине с правильно настроенным гипервизором, различия, скорее всего, будут незначительными во всех категориях — процессоре, памяти, хранилище и производительности сети.
Однако речь вообще не идет о реальной ситуации (поскольку запуск одной виртуальной машины на компьютере – это скорее сценарий для настольного компьютера, а не для сервера), и сравнивать производительность виртуальных машин некорректно.
контейнерные и физические рабочие нагрузки таким образом.
Но рассмотренный пример показывает, что производительность виртуальных машин, как и контейнеров, может быть очень близка к производительности «чистого железа» — всё зависит от условий.
Но это, конечно, не означает, что контейнеры и виртуальные машины одинаково хороши для всех задач.
И вот несколько примеров, подтверждающих это.
Реальные условия
Вот график теста производительности, в котором созданы несколько групп виртуальных серверов, на которых выполняется набор приложений, каждое со своей уникальной нагрузкой (так называемый Consolidation Stack Unit (CSU)).
Каждый сервер в группе выдает свои собственные результаты, например количество транзакций в секунду.
Затем мы объединяем эти данные, чтобы получить общий результат для каждой технологии виртуализации, сравнивая ситуации, когда эти приложения работают на одном и том же оборудовании, но с использованием разных инструментов виртуализации.
В данном случае мы сравниваем возможности виртуальных машин и системных контейнеров, а увеличение количества CSU дает нам возможность сравнить производительность этих технологий при разных уровнях нагрузки.
Как видите, до пиковой производительности контейнеры и виртуальные машины показывают очень схожие результаты, разница в производительности ограничивается несколькими процентами.
Однако когда дело доходит до полной загрузки процессора, различия становятся очевидными.
Если у ЦП не осталось свободных циклов, он не может уделять время обслуживанию гипервизора без ущерба для приложения, и поэтому производительность экосистемы виртуальных машин перестает расти раньше экосистемы контейнеров.
Далее происходит то, что виртуальным машинам сначала не хватает системной памяти.
Дело в том, что виртуальные машины являются «черным ящиком» для гипервизора, тогда как в случае с контейнерами содержимое прозрачно и операционная система может использовать неиспользуемую иначе память, а также удалять дубликаты (копии файлов, загруженные в память несколько раз).
раз).
Поэтому контейнеры, в отличие от виртуальных машин, не демонстрируют снижения производительности при дальнейшем увеличении количества CSU (разумеется, до определенного предела).
Вот еще один тест, различия еще более очевидны.
Так называемый сценарий «DVD-магазин» по характеру загрузки vConsolidate напоминает, но работает с приложением электронного магазина.
Здесь мы видим еще более заметные различия, которые объясняются особенностями конкретного приложения.
Конечно, не во всех случаях разница между контейнерами и виртуальными машинами будет столь разительной.
Вот еще несколько факторов, благодаря которым контейнеры работают лучше, чем виртуальные машины: Во-первых, контейнеры обеспечивают максимально быстрый запуск системы — буквально за доли секунды.
А это очень важно для микросервисов, которые постоянно запускаются, уничтожаются и пересоздаются.
Этот фактор также положительно влияет на любые гранулированные нагрузки, в рамках которых можно запускать нагрузки для решения небольших задач.
Во-вторых, системные контейнеры ОС Virtuozzo обладают уникальной функцией «pfcache».
Проще говоря, система обеспечивает объединение одинаковых файлов из разных контейнеров в момент их загрузки в память.
Результатом является как снижение общего потребления оперативной памяти, так и увеличение производительности ввода-вывода за счет лучшего кэширования — поскольку в кэше хранится меньше копий файлов, система может хранить больше уникальных файлов, что ускоряет доступ к ним.
Но не все контейнеры одинаковы.
В частности, согласно тестам, системные контейнеры Virtuozzo 7 демонстрируют максимальную плотность по сравнению с любым другим решением виртуализации Linux — на несколько процентов выше, чем у предыдущей версии (Virtuozzo 6) и примерно в два раза выше, чем у виртуальных машин на базе KVM. Для нас это чрезвычайно важно: производительность платформы — одна из основных причин, по которой наши клиенты выбирают Virtuozzo среди других платформ.
Несколько процентных пунктов могут составить значительные суммы, когда речь идет о сайтах с тысячами серверов — поэтому наша цель — всегда показывать производительность лучше, чем у конкурентов, во всех приложениях и системах, включая Windows.
Сценарии из реальной жизни
Существует несколько сценариев, в которых использование системных контейнеров, и в частности наших новых контейнеров Virtuozzo 7, может принести максимальную пользу: Сценарий 1. Контейнеры чрезвычайно полезны, когда серверы работают с максимальной нагрузкой, особенно если загрузка не только ресурсов процессора, но и оперативной памяти приближается к 100%.Фактически, это очень типичный случай при запуске систем анализа данных или пакетной обработки.
А если вы не оставляете резервные мощности для пиковых нагрузок, контейнеры помогут вам максимально эффективно использовать существующее оборудование.
Сценарий 2. Вы используете несколько копий одних и тех же или похожих приложений.
В этом случае pfcache может значительно повысить производительность всей экосистемы за счет освобождения памяти и оптимизации процессов ввода-вывода.
Сценарий 3. При запуске многопоточных веб-серверов, а также при создании множества виртуальных процессоров (значительно превышающих количество физических) для разных виртуальных машин происходит постоянное изменение контекста.
Обработка небольших запросов пользователей и переключение процессора на обработку задач от разных ВМ оказывается ресурсоемким и снижает производительность в случае традиционных ВМ.
Сценарий 4. Наличие большого количества мелких задач, работающих одновременно и конкурирующих за ресурсы.
В этом случае каждая виртуальная машина будет создавать свою дополнительную нагрузку на память (для загрузки структур ядра и гипервизора).
И чем больше отдельных процессов, тем больше выгода от использования контейнеров ОС.
Курс эффективности
Не во всех случаях контейнеры дают принципиальные преимущества, но в своем спектре задач серьезно превосходят возможности гипервизоров с виртуальными машинами.Они полезны для микросервисов, многокомпонентных веб-приложений, рабочих нагрузок анализа данных и других приложений с высокой степенью детализации и рабочих нагрузок.
Более того, мы продолжаем улучшать функции Virtuozzo Containers, и в версии 7 улучшена как плотность контейнеров, так и производительность на том же оборудовании.
Обновление ядра Linux для решений Virtuozzo позволило изначально интегрировать в решение такие инструменты, как CRIU для живой миграции контейнеров или Kpatch для обновления ядра без остановки сервисов.
Итак, к преимуществам системных контейнеров как технологии в целом теперь добавляются новые, уникальные возможности, которые делают их еще более интересным решением реальных бизнес-задач.
Теги: #Виртуализация #виртуальные машины #виртуальные машины #виртуальные машины #виртуализация контейнеров #виртуализация приложений
-
Бертолле, Клод Луи
19 Oct, 24 -
Просмотр Кистей Photoshop
19 Oct, 24 -
Рассказ «Я Тебе Расскажу»
19 Oct, 24