Поиск по сайту:

Эмуляция, виртуализация и Docker: в чем разница?


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

Вопрос производительности

Короткий ответ: эмуляция намного медленнее виртуализации, и все сводится к аппаратной оптимизации.

Эмуляция — это самая простая форма запуска приложения на непредусмотренном хосте. Эмулятор принимает команды, предназначенные для целевой системы, и переводит их в то, что хост-компьютер может понять и запустить. Обычно это включает в себя эмуляцию кодов операций и регистров процессора. Хорошим примером этого является эмуляция старых игр, таких как Nintendo N64, на современном ПК. ПК не может запускать игры для N64 напрямую, но эмулятор может брать инструкции, предназначенные для N64, и запускать их максимально близко к совершенству.

Хотя «Эмуляция» обычно используется для обозначения эмуляции видеоигр, она так же часто используется для бизнес-приложений. Например, может быть, у вас есть важная часть устаревшего программного обеспечения, которое должно работать в такой системе, как DOS. Запустить его в эмуляторе на новом сервере часто бывает проще, чем запустить его на старой машине. Это также может относиться к части программного обеспечения, эмулирующего эффекты устаревшего оборудования, например, эмулирующего старые сетевые контроллеры.

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

Поэтому вместо этого большинство виртуальных машин будут использовать технологию виртуализации, оптимизированную для аппаратного обеспечения. В Intel эта технология называется Intel-VT, а в AMD — AMD-V. Оба выполняют одну и ту же задачу виртуализации приложений x86. Если вы используете настольный компьютер, вам, возможно, придется включить их в BIOS, если они не включены по умолчанию.

Виртуализация часто используется в сочетании с гипервизором, который представляет собой базовую ОС, которая обрабатывает несколько виртуальных частных серверов. Если вы арендуете VPS у компании, занимающейся облачными вычислениями, такой как AWS, скорее всего, она работает на гипервизоре AWS Nitro, Proxmox или Hyper-V. Современные гипервизоры могут достигать производительности, очень близкой к нативной (также называемой «голым железом»). Хотя всегда есть немного накладных расходов, это лучше, чем подражать им.

Виртуализация почти всегда работает лучше всего, если вы виртуализируете одну и ту же архитектуру. Например, процессоры x86 от AMD и Intel смогут виртуализировать операционные системы x86, такие как стандартные Windows и Linux. Хотя технически для процессора ARM нет возможности виртуализировать процессор x86, в целом это не проблема.

Это может быть проблемой, как в случае с новыми Macbook от Apple на базе ARM, которые работают на собственных процессорах M1. Виртуализация операционных систем x86 не поддерживается. Хотя вы по-прежнему можете запускать другие ОС с такими программами, как Parallels, это будет намного медленнее, поскольку придется прибегать к эмуляции.

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

Как Docker сравнивается?

Docker позволяет запускать приложения в контейнерах, которые представляют собой изолированные пакеты, содержащие весь код, необходимый для запуска приложения. Это также очень безопасно; хост-компьютер может запускать несколько контейнеров Docker, не опасаясь, что они вырвутся из контейнера или запутаются друг с другом.

Во многих отношениях Docker достигает одной и той же цели — запуска нескольких приложений на частных виртуальных машинах Linux, но внутри он работает немного по-другому.

Docker не использует эмуляцию или виртуализацию. Он запускает весь код непосредственно на ЦП и хост-системе с нулевыми накладными расходами на виртуализацию. Чтобы изолировать контейнеры, он разумно использует пространства имен Linux, среди других функций, которые могут изолировать процессы в их собственной «контейнерной тюрьме». Процессы внутри тюрьмы не могут видеть или взаимодействовать с файлами, процессами или системными ресурсами, которые им не назначены.

Это позволяет создать систему, в которой несколько приложений могут работать параллельно друг с другом в одной операционной системе хоста без накладных расходов на отдельную операционную систему для каждого виртуального частного сервера. Для такого поставщика, как AWS, это экономитмного денег.

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