Описание тега unikernel

Unikernels: библиотека операционных систем для облака

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

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

Мы занимаем крайнюю позицию в отношении специализации, рассматривая окончательный образ виртуальной машины как одноцелевое устройство, а не как систему общего назначения, убирая функциональность во время компиляции. В частности, наш вклад: подход unikernel к предоставлению герметичных одноцелевых устройств, особенно подходящих для предоставления облачных услуг; оценка полной реализации этих методов с использованием языка функционального программирования (OCaml), показывающая, что преимущества безопасности типов не обязательно влияют на производительность; а также библиотеки и языковые расширения, поддерживающие системное программирование в OCaml.

Подход unikernel основан на прошлой работе в библиотечных ОС.

  • Весь программный стек системных библиотек, языковой среды выполнения и приложений компилируется в единый загрузочный образ виртуальной машины, который запускается непосредственно на стандартном гипервизоре.
  • Ориентируясь на стандартный гипервизор, unikernels избегают проблем совместимости оборудования, с которыми сталкиваются традиционные библиотечные ОС, такие как Exokernel и Nemesis.
  • Избегая обратной совместимости, в отличие от Drawbridge, unikernels адресуют облачные сервисы, а не настольные приложения.
  • Ориентируясь на массовое облако с библиотечной ОС, unikernels может обеспечить более высокую производительность и улучшенную безопасность по сравнению с Singularity.
  • Наконец, в отличие от Libra, которая обеспечивает абстракцию libOS для JVM поверх Xen, но полагается на отдельный экземпляр виртуальной машины Linux для обеспечения сети и хранения, unikernels представляют собой более узкоспециализированные виртуальные машины одноцелевого назначения, которые напрямую интегрируют протоколы связи.

Мы описываем полный прототип unikernel в виде нашей реализации Mirage на основе OCaml. Мы оцениваем его с помощью микро-тестов и устройств, обеспечивающих DNS, OpenFlow и HTTP. Мы считаем, что принесение в жертву обратной совместимости на уровне исходного кода позволяет нам повысить производительность и значительно повысить безопасность внешних облачных сервисов. Мы сохраняем совместимость с внешними системами через стандартные сетевые протоколы, такие как TCP/IP, вместо того, чтобы пытаться поддерживать POSIX или другие традиционные стандарты для создания приложений. Например, DNS-сервер Mirage превосходит как BIND 9 (на 45%), так и высокопроизводительный сервер NSD, при этом используются образы виртуальных машин гораздо меньшего размера: наш образ устройства unikernel составлял всего 200 КБ, а устройство BIND - более 400 МБ.

В заключение мы обсудим наш опыт построения Mirage и его положение в современном мире.