Должна ли машина разработки находиться внутри виртуальной машины? [закрыто]


41

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

Как вы относитесь к виртуализации своей машины разработки? Вы уже сделали это? Если вы сделали, какие-нибудь подводные камни или ошибки вдоль дороги?


1
Что тебя беспокоит? Это все еще для всех целей компьютер.

2
возможная
копия

Что за машина для разработки? Работа разработчика или общая среда разработки?
user606723

Ответы:


29

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

Для того, чтобы внутренний цикл code-compile-test был максимально быстрым, требуются лучшие машины - компиляция и запуск тестов, очевидно, быстрее выполняются на машинах с большим количеством ядер, поскольку эти действия могут быть довольно легко выполнены параллельным образом * ,

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

РЕДАКТИРОВАТЬ: Это просто излагает мои личные ощущения от разработки с использованием корпоративных виртуальных машин, которые часто запрещают сокращать расходы на оборудование, которые, как правило, работают на серверах. Запуск локальной виртуальной машины кажется в большинстве случаев излишним, если вы соблюдаете хорошую дисциплину контроля версий, если только для вашего проекта не требуется специально разрабатывать код для нескольких ОС.

*: под этим я подразумеваю подзадачи внутри этапов компиляции и этапов тестирования, которые могут выполняться одновременно, а НЕ компилироваться и тестироваться одновременно :)


+1 - это был мой опыт разработки на ВМ. Хит производительности просто не стоит никаких потенциальных выгод. Машина разработки просто не может быть достаточно быстрой.
Скотт Уитлок

Я никогда не делал этого (кроме многоплатформенного тестирования), но в принципе, разве виртуальная машина не могла быть настроена на сумасшедшую скорость? Пользовательский интерфейс может быть медленным, но вы могли бы бросить много железа в серверной комнате на этапе компиляции, не так ли?
Дэн Рэй

1
В принципе конечно! Определение виртуальной машины с сегментами памяти и 20 процессорами не является сложной задачей. Сложнее всего, когда у вас есть дюжина виртуальных машин высокой спецификации на одном сервере - если у вас есть 12 однопроцессорных виртуальных машин на сервере с 8 процессорами, каждая виртуальная машина получает некоторое время процессора, когда становится доступным один процессор. Если у вас есть 3 ВМ с 4 ядрами в каждой, вам нужно подождать, пока 4 ЦП освободятся, прежде чем каждая ВМ получит время ЦП. Не говоря уже о необходимости переключать контекст всех этих ядер ... это становится трудным. Я не слышал о том, чтобы это было сделано удовлетворительно в больших масштабах - что ничего не значит :)

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

1
@MarcoDinacci Честная точка. Я бы сказал, что при правильном управлении исходным кодом вам не нужно находиться внутри виртуальной машины, если вы не разрабатываете для нескольких операционных систем.

12

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

У меня ноутбук Dell Studio 15 (Quad I7 2,8 ГГц, 8 ГБ RAM, ATI Graphics), работающий на Win 7 Ultimate 64bit с установленной виртуальной коробкой. Все мои виртуальные машины работают на внешнем 500-гигабайтном USB-накопителе, прикрепленном к ноутбуку.

VM 0 - Win 7 64bit, чистая установка в качестве базового шаблона

VM 1 - Win 7 64bit (2 процессора, 4 ГБ оперативной памяти, 120 ГБ HD) с набором инструментов Visual Studio 2008

VM 2 - Win 7 64bit (2 процессора, 4 ГБ оперативной памяти, 120 ГБ HD) с набором инструментов Visual Studio 2010

VM 3 - Win 7 64bit (2 процессора, 2 ГБ оперативной памяти, 120 ГБ HD) с набором инструментов Eclipse Java

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


1
Я также запускаю нечто подобное, но большая проблема заключается в том, что, получив решение для Visual Studio с большим количеством проектов, вы в конечном итоге ждете, пока проект запустится / узкие места дискового ввода-вывода просто возрастают. Тем не менее, я все еще использую виртуальную машину, когда это не проблема, отлично иметь переносную среду.
Союзник

11

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

Мне довелось работать в компании, где мы предлагаем пакеты программного обеспечения, которые интегрируются с различными периферийными устройствами USB (например, веб-камеры, принтеры этикеток, считыватели магнитных полос и т. Д.). Даже если бы я подключил порты USB к виртуализированному серверу, я заметил странные и необъяснимые проблемы с драйверами устройств сторонних производителей.

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


1
Также неприятно, если вам нужно использовать карту безопасности удаленного доступа для подключения к TFS или чему-то еще.
Стивен Эверс

8

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

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

Когда мы перешли на виртуальные машины, все изменилось. Теперь только один человек отвечает за настройку среды на ВМ со всем, что связано с проектом. Когда он закончил, всем членам команды предоставляется копия виртуальной машины. Это сокращает время на настройку среды для каждого нового члена команды (копирование ВМ не должно занимать более 1 часа). Это также позволяет нам работать в нескольких рабочих средах параллельно.

Недостатки использования виртуальных машин: скорость. Хит производительности на ВМ виден. На медленных рабочих станциях это может сделать разработку практически невозможной. Если у вас есть хорошая рабочая станция (четырехъядерный процессор, 8 + ГБ ОЗУ, SSD), вы, вероятно, этого не заметите.


1
Рассматривали ли вы сделать некоторую работу по оптимизации вашего набора инструментов? Если настройка вашего инструмента настолько сложна, что их нелегко установить, возможно, вам нужно немного переосмыслить инструменты.
Майкл Кохн

Это не просто набор инструментов, это больше времени для настройки машины и устранения неполадок в различных средах. Зачем кому-то тратить 2 часа на установку / настройку чего-либо, если это уже сделал кто-то другой?
Кристиан П

Почему вы не можете создать машину разработчика и взять образ для создания дополнительных экземпляров? Это предполагает, что вы все используете одно и то же оборудование.
Джефф

@JeffO У вас больше гибкости с виртуальной машиной, потому что она не так зависит от оборудования. Было бы хорошо, если бы мы все работали на одном и том же оборудовании, но мы используем ноутбуки / десктопы.
Кристиан П

1
Просто любопытно - есть ли в вашей команде люди, которые уходят / приходят так часто, что вы заботитесь о настройке новой машины? Если это так, я подозреваю, что стабилизация команды даст вам гораздо больший прирост производительности. (Настройка человека на самом деле является узким местом, в отличие от машины, я думаю)
kizzx2

7

Как уже упоминали другие, это зависит от нескольких вещей:

  • Как выглядит ваша среда?
  • Достаточно ли у вас прав доступа для разработки?
  • Ваш HW нюхает?

Среда

Использование ВМ может помочь, если вы работаете над несколькими версиями проекта; несколько проектов; или нацеливание на другую ОС, отличную от той, которую вы обычно запускаете (ОС хоста). Я много работаю над SharePoint, и возможность запуска другой машины для разных версий выпуска полезна, поскольку я могу просто запустить другую машину и хорошо оценить состояние GAC / базы данных. Также, если вам нужно ориентироваться на среду приложений * nix, но иметь компьютер с Windows, вы все равно можете заниматься разработкой на виртуальной машине (именно так я изучаю Ruby дома, хотя обычно я работаю с .NET dev). Обычно я выступаю за тестирование / разработку ASP.NET на той же версии IIS, под которой в конечном итоге будет работать приложение (это же относится и к другим целевым средам сервера). В зависимости от версии ОС могут быть небольшие, но критические различия. Обратите внимание, что это не означает, что вы должны писать код для конкретной версии IIS / OS, но давайте будем честными, это действительно, действительно должно работать там, где вы собираетесь развернуть его, а не только на вашей локальной машине.

Кроме того, виртуальные машины (в зависимости от используемого программного обеспечения) позволяют делать снимки текущего состояния машины и / или клонировать их. Это может иметь неоценимое значение при создании прототипа, и вам не нужно беспокоиться о том, что происходит в вашем GAC / реестре / и т. Д. Я также нашел их очень ценными при предварительной настройке клиентской демонстрации. Поскольку демонстрационная среда была на виртуальной машине, я мог продолжать работать вплоть до момента, когда клиент мог показать, что мы выполнили, потому что я работал на другой машине .

Достаточные права

Как правило, это относится к людям, которые работают в компании с довольно строгим набором политик для прав доступа. Если вы не можете иметь неограниченного администратора на своем компьютере, то это подходящее время для работы на виртуальной машине. Обычно полномочия беспокоятся только о блокировке вашей хост-ОС, гость может быть широко открыт (с точки зрения разрешений). Я столкнулся со странными проблемами с перемещаемыми профилями, ограниченными правами администратора и запуском VS 2010; использование виртуальной машины позволило мне избежать этих проблем.

Ваш HW нюхает?

Это сводится к тому, что ваши образы виртуальных машин находятся на сервере, а ваш удаленный - в них, ИЛИ вы запускаете их локально. Если вы работаете на сервере, то, вероятно, самой большой проблемой будет слишком много виртуальных машин, работающих на одном и том же оборудовании. Локально, вы в основном хотите много оперативной памяти и минимизировать частоту перегрузки буфера R / W для вашего жесткого диска. Для базовой разработки LOB / SharePoint / ASP.NET я обнаружил, что минимум 8 ГБ ОЗУ и конфигурация с двумя жесткими дисками на практике работают очень хорошо (работает на i5, но я также работал с Core 2). Второй жесткий диск имеет самое большое значение в производительности.

Примечание. У меня нет статистики, подтверждающей это, но я заметил, что Virtual PC имеет тенденцию к снижению производительности по сравнению с VMWare и Virtual Box. Я не могу говорить с Hyper-V, так как я не работал с ним. Я не удивлюсь, если использование Virtual PC (как начальный шаг в использовании виртуальных машин) заставит разработчиков использовать программное обеспечение для виртуализации.


5

Как обычно: это зависит. Например, я определенно не рекомендовал бы это для любой разработки в реальном времени или связанной с компьютерной игрой.

Мой личный опыт: у меня есть iMac, выпущенный в конце 2009 года, и я обнаружил, что Visual Studio 2010 практически невозможно использовать в Parallels Desktop, так что нажатие клавиши в редакторе кода занимает несколько секунд для регистрации. Windows в SQL Server Management Studio будет расфокусировать и переключать фокус, очевидно, наугад. Я только закончил тем, что пошел с учебным лагерем.

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

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


1

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

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

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


2
Вы не запускаете свои виртуальные машины на своей машине?

1
Иногда в корпоративных средах людям выделяются виртуальные машины, работающие в центре обработки данных, а не локальные образы машин.

Когда я это сделал, я запустил их на сервере VMWare.
Гленатрон

1

Я использовал их в предыдущей компании. Несколько сторонних контролей не сосуществовали хорошо с другими версиями той же компании. Я также использовал пару для тестирования и отладки других операционных систем (XP против Vista против 7). Один виртуальный имел VB6 и VS2003 для более старых продуктов. Да, на типичной машине разработчика она может быть медленной и громоздкой, но у меня было несколько запасных жестких дисков, которые я «пожертвовал» и поместил виртуальные устройства на свои собственные жесткие диски на свои контроллеры. Я был последним, кто продолжал использовать виртуалы, и из-за некоторых ошибок только я мог работать над ними (из-за проблем с операционной системой и компонентами).

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

Для разработки в виртуалах я советую получить что-то с минимум 8 ГБ ОЗУ. 16 или больше будет лучше, так как для любой виртуальной студии вам понадобится около 1,5 ГБ ОЗУ хоста для работы на скорости выше «ледниковой». Кроме того, получите много жестких дисков при покупке компьютера. Для дисков, которые вы выбираете из своего запаса аппаратного обеспечения, ищите по крайней мере в два раза больше виртуального жесткого диска, который вы будете использовать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.