Виртуализация и почему это хорошо для программистов - PullRequest
6 голосов
/ 29 июня 2009

Почему это помогает узнать о виртуализации с точки зрения программиста? Кроме тестирования и разработки на нескольких разных платформах без необходимости переключения между операционными системами, есть ли конкретная причина, почему виртуализация важна для программиста? Есть ли какие-либо детали, которые необходимо учитывать перед разработкой на виртуальных экземплярах?

Ответы [ 13 ]

13 голосов
/ 29 июня 2009

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

Раньше я делал эти тесты, сохраняя жесткий диск с новой установкой операционной системы и создавая копию этого диска для (почти) каждого нового запуска теста. Это было очень много времени, и решение для виртуальной машины сэкономило мне времени. Обратите внимание, что это даже позволяет выполнять удаленную отладку так же легко, как и при использовании двух не виртуальных машин.

Примечание : Если вам интересно, я использую VirtualBox , который является очень хорошим и бесплатным инструментом виртуализации.

11 голосов
/ 29 июня 2009

Если вы разрабатываете драйвер или что-то очень близкое к оборудованию с высоким риском поломки машины, вы будете рады работать на виртуальной машине.

Вернуть старое состояние проще, чем восстановить поврежденную ОС.

6 голосов
/ 29 июня 2009

Одним из основных преимуществ является наличие всей среды разработки в виде одного файла изображения. У меня отлично настроенная версия Windows Server, Visual Studio, ReSharper и т. Д. Я могу легко попробовать новую версию чего-либо на копии этой виртуальной машины, не беспокоясь о том, что это вызовет проблемы.

Я также могу создать резервную копию всей своей среды разработки, чтобы очень легко перенести ее на другую физическую машину. Я прошел через 3 машины в этом офисе один, так что это было спасением само по себе.

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

Редактировать: Как сказал Нейдер, ввод / вывод, очевидно, важен и для большинства проектов. Хотя разработка на виртуальной машине действительно означает довольно большие потери ввода-вывода по сравнению с установкой собственной ОС, на практике я редко нахожу это проблемой. Превосходные возможности произвольного доступа SSD также помогают устранить этот недостаток.

4 голосов
/ 29 июня 2009

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

2 голосов
/ 29 июня 2009

У нас имеется большое количество различных версий / пользовательских настроек нашего программного обеспечения, и невозможно установить две версии нашего программного обеспечения на одном компьютере. Виртуализация позволяет нам заменить 50-60 физических машин, которые нам необходимы для тестирования и воспроизведения проблем, на 2-3 виртуальных сервера - для создания копии имеющегося у нас шаблона VHD и создания новой виртуальной машины требуется около 10 минут и до тех пор, пока вы выделяете 1-2 ГБ ОЗУ, производительность сравнима с производительностью (медленной) физической машины.

Виртуальные машины также отлично подходят для сборочных машин.

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

1 голос
/ 29 июня 2009

По моему опыту, в большинстве случаев ответом обычно является "нет" (при удалении тестирования и нацеливания на несколько платформ). Это огромные причины для знакомства с "настольными" VM-решениями. Другие отлично справились со списком редких исключений, таких как отладка кодов ядра.

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

  1. Потеря точности или даже обращения времени в таймерах с высоким разрешением из-за эмуляции аппаратных ресурсов (в некоторой степени зависит от платформы vm и операционной системы)

  2. Виртуальные сетевые интерфейсы обычно соединяются. Мы видели очень странное поведение в хост-системе с приложением, которое устанавливает собственный мост между виртуальными интерфейсами - поведение, которое логически не должно влиять на хост в одном из ведущих решений для ВМ.

  3. Модели использования - если ваш продукт имеет лицензионные коды orwellian или записывает поведение, зависящее от состояния, при взаимодействии с удаленными системами, вы должны учитывать, что произойдет, если система была «приостановлена» и «перезапущена» или перезапущена с более ранней версии ». государство". Обычно такие вещи будут приняты во внимание в любом случае в надежной реализации.

1 голос
/ 29 июня 2009
  • Запишите состояние ошибки в программе и отправьте ее разработчику (вместе со всей «машиной»).
  • Тестирование вашего кода на различных O.S, некоторые из которых у вас нет.
  • Работа в более защищенной среде, обеспечение того, чтобы код не наносил вреда вашей системе - полезно для понимания опасных программ, таких как вирусы, и разработки средств защиты от них, для написания потенциально неправильных программ на жестком диске и всего, что может иметь катастрофические последствия для вашей системы.
  • Легко пишите свой собственный O.S без необходимости писать на «реальных» загрузочных секторах, что может быть вредным действием (надеюсь, это не ново ...).
  • Быстро используйте инструменты и программы, не найденные на вашем собственном O.S.
  • Демонстрация программы в разное время путем восстановления виртуальной машины. быстрее и менее подвержен сбоям, чем попытка воссоздать состояние за несколько минут до демонстрации.
  • Меньше напрямую связано с программированием, но работа с виртуальной машиной (например, для просмотра документации) имеет то преимущество, что ваша важная система (и код) с меньшей вероятностью пострадают от вредоносных программ.
1 голос
/ 29 июня 2009

Я удивлен, что никто не упомянул о простоте развертывания. Все, что вам нужно сделать, - это создать виртуальную операционную систему, а затем скопировать образ на столько новых серверов (использующих какое-либо решение для виртуализации [например, VMWare]), сколько вам нужно, легко масштабируя ваше приложение.

1 голос
/ 29 июня 2009

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

1 голос
/ 29 июня 2009

Хорошо для разработки, потому что у вас такая же конфигурация сервера на виртуальной машине, как на рабочем сервере.

https://stackoverflow.com/questions/905926/developer-software-setup

...