Виртуальные машины - обходной путь для плохих операционных систем?

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

  • Это дорого с точки зрения производительности
  • Это занимает много места для хранения
  • Это вводит сложность

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

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

Я что-то пропустил? Почему операционные системы не сделаны так, чтобы виртуализация не требовалась?

* Я знаю, что виртуальные машины также можно использовать только для экспериментов, для проверки некоторых других ОС, но я скорее говорю о серверных сценариях, где каждая виртуальная машина является отдельным сервером.

1 ответ

Решение

Насколько я понимаю, мы используем виртуальные машины для изоляции сред

Правильно.

… Чтобы конфигурации одной среды не нарушали другую среду.

Это слишком узко. Изоляция - это безопасность в широком смысле: конфиденциальность, целостность и доступность.

  • Конфиденциальность: изоляция обеспечивает детальное управление разрешениями. Виртуальные машины и контейнер Docker могут получать доступ только к данным и другим службам, доступ к которым вы им явно предоставили.
  • Целостность: сами сервисы могут быть отделены от логических и физических механизмов хранения.
  • Доступность: отдельные службы могут быть переконфигурированы, обновлены и перезапущены независимо друг от друга. Отказ одного сервиса не влияет на другие. Управление ресурсами также более гибкое: вы можете разделить ресурсы одной физической машины на множество сервисов и управлять выделенными ресурсами на лету. Сделать это на реальном оборудовании не так-то просто, вы не можете оперативно заменить процессор на более мощный (или менее мощный, если вы хотите выделить больше ресурсов для другой службы).

С такими большими затратами на производительность, разве не было бы лучше на самом деле придумать лучшую операционную систему, которая на самом деле имеет встроенную изоляцию сред?

Современные процессоры поддерживают виртуализацию, например, посмотрите VT-x, доступный в процессорах Intel. Это позволяет процессору запускать виртуальные машины без какого-либо влияния на производительность.

И на самом деле...

Докер увидел это, и поэтому они придумали контейнеры

Docker не реализует контейнеры, он использует только функции контейнеризации, предоставляемые хост-ОС. Это просто удобный способ настроить их для совместной работы и обмена предварительно созданными сервисными образами. Чтобы назвать лишь некоторые функции, предоставляемые ОС, в Linux Docker использует оверлеи, cgroups и iptables. Вы можете использовать все это без установки докера. Таким образом, в Linux есть встроенная изоляция сред, а Docker делает его простым в использовании.

Здесь стоит упомянуть Android, который, хотя и основан на ядре Linux, использует среду выполнения ART VM и обеспечивает более строгую изоляцию приложений, чем "обычная" GNU/Linux по умолчанию.

Почему операционные системы не сделаны так, чтобы виртуализация не требовалась?

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

Другие вопросы по тегам