Контейнеры для Windows: за 10 лет до Microsoft

    В октябре 2014 года компания Microsoft объявила о imageпартнерстве с Docker, в рамках которого будет представлена реализация контейнерной виртуализации для будущей версии ОС Windows Server, ожидаемая в 3 квартале 2015 года. Для поддержки контейнеров Microsoft воспользуется собственной технологией, разработанной в исследовательском проекте Drawbridge. Технология виртуализации Drawbridge похожа на ту, что применяется в проекте Wine, позволяющем запускать приложения Windows на компьютерах с UNIX-подобными операционными системами. Ключевая особенность обеих технологий заключается в том, что виртуализация аппаратуры (процессора, памяти, устройств ввода-вывода) не требуется, а эмулируется исключительно исполняемое окружение ОС Windows.
    Parallels начала разрабатывать контейнеры под Windows задолго до того, как об этом задумались в Microsoft. И поскольку эта тема в связи с анонсом Microsoft, очевидно, становится очень актуальной, то в этом посте я постараюсь рассказать, за счет каких именно технологий работают наши Windows-контейнеры, какими функциональными возможностями обладают, а также каковы основные сценарии их применения. В комментариях готов ответить на все вопросы, включая самый популярный — сколько максимально контейнеров можно запустить на хосте.

    Контейнеры Parallels

    Увеличение мощностей вычислительных систем продолжает подчиняться закону Мура, но как эффективно использовать эти системы с минимальными накладными расходами? Одно из возможных решений — применение контейнеров для контроля ресурсов и изоляции приложений, запущенных разными пользователями. Без ложной скромности, пионером и лидером в продвижении контейнерных технологий является компания Parallels, которая, помимо продуктов для ОС на базе ядра Linux, вот уже без малого 10 лет предлагает свою собственную реализацию контейнеров для Windows. Подход, реализованный в Parallels, основан на виртуализации ядра ОС, которое после модификаций способно запускать произвольное количество пользовательских окружений Windows.

    imageПользовательское окружение размещено на виртуальном диске, содержащем ссылки на файлы ОС Windows и свой собственный системный реестр; с этого же диска запускаются системные файлы ОС Windows, которые формируют окружение для пользователей (в том числе администратора), с возможностью членства в домене, работы приложений и сетевого взаимодействия через виртуальный адаптер. Это то, что мы называем Parallels-контейнером для Windows.

    А что под капотом?

    Контейнеры Parallels — как для ОС на базе ядра Linux, так и для Windows, — полагаются на модификации в ядре. И если Linux-сообщество приняло от Parallels большинство этих изменений в главную ветку исходных кодов ядра, то компания Microsoft не была настолько открытой. За время работы над контейнерами мы направили в Microsoft большое количество сообщений об обнаруженных ограничениях и просто ошибках в компонентах ядра Windows. Часть из них были учтены в следующих версиях Windows, а для решения более десятка проблем Microsoft выпустила отдельные пакеты исправлений. Так что можно сказать, что мы тоже участвуем, хотя и косвенно, в разработке компонентов ядра Windows. Но, к сожалению, на наши инициативы о расширении сотрудничества в компании Microsoft пойти не решились.

    Так как же это все-таки работает, если Microsoft не принимает изменения и не предоставляет доступ к исходным кодам ядра Windows? При разработке контейнеров Parallels центральное место занимают 2 технологии: реверс-инжиниринг и обновление программного кода во время исполнения.


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

    Как уже отмечалось, вся технология виртуализации работает в ядре ОС, что позволяет разделять объекты ядра между контейнерами, тем самым изолируя контейнеры друг от друга. Каждый контейнер имеет свой собственный набор процессов, сессий и драйверов, а также реестр и дерево объектов ядра.


    Обратим внимание на скриншоты. Во-первых, можно сделать вывод, что опыт взаимодействия пользователя с ОС в контейнере ничем не отличается от взаимодействия с самой операционной системой Windows, во-вторых, становится понятно, как работает изоляция. Контейнеры ничего не знают ни друг о друге, ни о хосте, на котором они размещены, а вот с самого хоста контейнеры легко доступны, поэтому администратор хоста является СуперАдминистратором для контейнеров. Контейнеры интегрированы в ОС Windows таким образом, чтобы штатные инструменты ОС, такие как Диспетчер задач, Редактор Реестра и набор утилит Sysinternals Марка Руссиновича могли использоваться для управления контейнерами и их мониторинга.

    Сколько вешать в граммах?

    Самый популярный вопрос наших пользователей – сколько контейнеров Parallels можно запустить на хосте? В лаборатории Parallels во время эксперимента нам удалось запустить порядка 600 контейнеров, в которые можно было авторизоваться через RDP, хотя задержки в отклике пользовательского интерфейса были уже неприемлемо велики. Дальнейшие эксперименты подтвердили, что накладные расходы на виртуализацию ядра ОС относительно невелики и заметно меньше, чем в решениях на базе гипервизоров, поэтому решающими факторами будут приложения, которые вы планируете запускать в контейнере, и физические возможности самого хоста.

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

    Шаблоны приложений

    Как разворачивать приложения внутри контейнеров Parallels? Можно делать это как обычно, запуская установщик приложения, но если контейнеров очень много — жать кнопку «Установить» придется неисчислимое количество раз. Чтобы автоматизировать процесс и не тратить дисковое пространство контейнера для размещения файлов приложения, мы применяем Шаблоны приложений. Физически шаблон — это файл, в котором хранится информация, воспроизводящая оригинальное размещение файлов, папок и ключей реестра. Для создания шаблона приложения используется специальный инструмент, Мастер Создания Шаблонов, который отслеживает все изменения на файловой системе и в реестре, которые вносит установщик приложения, и сохраняет эти изменения в шаблон приложения. Получившийся шаблон приложения можно подключить к любому контейнеру, что будет эквивалентно установке этого приложения, и сразу же начать им пользоваться в контейнере. Пользователь контейнеров Parallels может самостоятельно создать шаблон из любого приложения, которое можно установить внутрь контейнера.


    Файловая система с поддержкой копирования при записи

    Контейнеры Parallels делят друг с другом не только ядро, но и все файлы, установленные на хост из дистрибутива OC Windows, что значительно экономит место на СХД. Дедупликация данных осуществляется на файловом уровне с помощью шаблонов и специализированной файловой системы с поддержкой копирования-при-записи. Для каждой поддерживаемой версии ОС Windows, включая языковые локализации, Parallels выпускает шаблон ОС. Шаблон ОС отличается от шаблона приложения только тем, что содержимое файлов в нем не хранится. Изнутри контейнера обращение к файлам из шаблона ОС выглядит абсолютно прозрачно, создавая целостное представление файловой структуры ОС Windows, состоящее из общих и приватных для контейнера файлов. Поддержка в файловой системе копирования-при-записи позволяет избежать модификации файлов из шаблона ОС, сохраняя изменения только внутри контейнера.


    Кому это нужно?

    С самого начала проекта мы в Parallels предлагали свои контейнеры для хостинга веб-приложений, главное из которых — система автоматизации Parallels Plesk. Продукты хостинга на базе контейнеров Parallels предлагают ведущие мировые провайдеры, такие как AT&T, 1&1, GoDaddy, HostEurope и др.


    Но больше всего контейнеры Parallels под Windows подходят для развертывания множества одинаковых окружений, управляемых и настраиваемых единообразно. Пример такого сценария — виртуализация рабочих столов. Так, Parallels в партнёрстве с интегратором IBS разработала и с 2013 предлагает сертифицированное ФСТЭК решение Parallels VDI, которое состоит из брокера соединений и виртуализации на базе контейнеров. В настоящий момент на базе этого решения реализуется масштабный проект по автоматизации Федеральной налоговой службы РФ, предусматривающий переезд в облачный дата-центр более 10.000 рабочих мест.

    История проекта

    Проект контейнеров под Windows стартовал в мае 2002 года, после удачных экспериментов с контейнерами Parallels на базе ядра ОС Linux. В январе 2003 года был продемонстрирован прототип на Windows 2000 Server, который умел запускать 50 изолированных копий Microsoft IIS и Microsoft SQL Server, а уже в июне 2005 состоялся первый публичный релиз продукта Parallels Virtuozzo Containers for Windows 2003 Server версии 3.0.

    На сегодняшний день проект пережил 7 публичных релизов, было выпущено без малого 300 обновлений, а кодовая база проекта превысила 1.300.000 SLOCs. А совсем недавно общее количество контейнеров, созданных с использованием технологий Parallels (включая описываемую), превысило 1.000.000!

    Высокой оценки контейнеры Parallels заслужили и в Microsoft – в частных беседах инженеры этой компании отзывались о проекте как о самом технически сложном для ядра Windows.



    Заключение

    Приход Microsoft на рынок контейнеров, без сомнения, сделает такой подход к виртуализации гораздо популярнее, а решения Docker позволят «заворачивать» приложения в контейнеры простым и удобным способом. С технической точки зрения достоинством контейнеров Microsoft можно считать небольшие затраты на виртуализацию и возможность реализовать контейнеры исключительно в пользовательском режиме исполнения ОС. К недостаткам можно отнести трудности в обеспечении совместимости приложений, ведь для этого необходимо эмулировать весь Windows API, который на данный момент насчитывает тысячи вызовов.

    Несмотря на то, что подходы к реализации контейнеров в Parallels и Microsoft различны, обе технологии могут прекрасно дополнять друг друга — контейнеры Microsoft, вероятно, смогут работать внутри контейнеров Parallels. Поэтому мы рассматриваем Microsoft не как конкурента, а как создателя экосистемы Windows, в которой контейнерная виртуализация занимает важное место.

    Нам позволяет надеяться на это тот факт, что существующие сейчас на рынке проекты по контейнерной виртуализации для ОС на базе ядра Linux не находятся в состоянии конкуренции – над большинством из них команды из Parallels, Google, IBM, Canonical, Docker и т.д. работают совместно. И хотя экосистема разработки ОС Windows по понятным причинам более закрыта, мы рассчитываем на дальнейшее сотрудничество.

    Узнать больше и попробовать продукт Parallels Containers for Windows можно здесь.
    Я постараюсь также ответить на все ваши вопросы в комментариях.

    Parallels

    128,00

    Мировой лидер на рынке межплатформенных решений

    Поделиться публикацией
    Комментарии 11
      +19
      Как то даже в голову не могло прийти, что такого уровня вещь можно сделать не имея исходных кодов и оффициальной поддержки от производителя ОС.
      Ну вы ребята и монстры! В хорошем понимании этого слова)
        +1
        Респект, Parallels. Good old Hackery!
          +1
          Спасибо за столь лестную оценку нашей работы!
        +5
        Круто! в Parallels настоящие Хакеры сидят. (в хорошом смысле слова hackers)
        Только на сколько понимаю, Docker в Win Server будет «бесплатным», т.е. будет компонентом возможно даже Standart Edition.
        Для поддержания спроса на ваше решение — надо будет всегда бежать впереди паровоза :)
          0
          «приходится бежать со всех ног, чтобы только остаться на том же месте...», а мы стараемся бежать еще быстрее :)
          0
          Контейнеры для Windows: за 10 лет до Microsoft

          В октябре 2014 года компания Microsoft объявила о партнерстве с Docker, в рамках которого будет представлена реализация контейнерной виртуализации для будущей версии ОС Windows Server

          Было бы интересно прочесть статью от маркетинга о том, почему «не шмогла», ведь в Linux-контейнерах происходит то же самое. Удивительно и странно наблюдать сейчас как Docker (не имея никаких ракетных технологий) съедает за рубежом рынок, который должен мог бы быть съеден OpenVZ несколько лет назад.
            +1
            Здесь нужно понимать, сколько денег Docker получил от инвесторов за последнее время. Январь 2014 — $15 млн techcrunch.com/2014/01/21/docker-raises-15m-for-popular-open-source-platform-designed-for-developers-to-build-apps-in-the-cloud/
            Сентярь 2014 — $40 млн blog.docker.com/2014/09/docker-closes-40m-series-c-led-by-sequoia/

            Вопрос в том, что технологии требуют денег. Даже не самые лучшие. Поэтому и побеждают не первые, и не самые технически интересные
              +1
              Это же разные технологии. Правильнее сравнивать OpenVZ и lxc. Второй и появился как развитие идей первого, которому все так же нужно было патченное ядро.
                0
                Это действительно интересная тема, но мне кажется все детали успеха Docker можно будет оценить только ретроспективно по прошествии какого-то времени — пока ситуация развивается и чем она закончится можно только гадать :)
                +1
                Раз уж вы уже успели пощупать контейнеры Microsoft «с технической точки зрения», почему бы не написать и о них побольше, а не только о ваших?

                Например, интересно, будут ли они поддерживать разные версии системных файлов (читай независимую установку патчей) в контейнерах. И планируется ли (если возможно в принципе) это у вас.
                  +2
                  На самом деле я хотел рассказать прежде всего о контейнерах Parallels, а как будут выглядеть контейнеры Windows наверняка знают, я думаю, только в Редмонде. В статье же я опирался только на доступную информацию о Drawbridge и утверждениях Марка Руссиновича о том, что их контейнеры будут основаны на этом проекте.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое