Uma máquina de desenvolvimento deve estar dentro de uma VM? [fechadas]

39

Esta postagem de Rob Conery (observe a lesma) diz que o ambiente de desenvolvimento deve ser executado dentro de uma máquina virtual. Eu vejo o que ele está dizendo e tendem a concordar, mas ainda me sinto um pouco desconfortável. Agora que a virtualização é tão madura que mesmo os sistemas de produção executados dentro da velocidade das VMs são praticamente um problema, mas, como eu digo, algo me incomoda aqui.

Qual é a sua opinião sobre como virtualizar sua máquina de desenvolvimento? Você já fez isso? Se você fez, alguma armadilha ou pegadinhas ao longo da estrada?

    
por Anton Gogolev 17.10.2011 / 12:35
fonte

8 respostas

26

Minha experiência com desenvolvimento em VMs em um ambiente corporativo é que, devido à virtualização de vários núcleos sendo repletos de dificuldades, é difícil obter o tipo de desempenho que muitas máquinas de desenvolvimento corporativo precisam.

Fazer com que o loop interno de compilação de código seja o mais rápido possível requer as melhores máquinas possíveis - a compilação e a execução de testes obviamente são executadas mais rapidamente em máquinas com mais núcleos, pois essas atividades podem ser facilmente executadas em um forma simultânea *.

Até que os principais sistemas operacionais de desenvolvimento possam lidar com o número de núcleos disponíveis sendo voláteis e até que o software de virtualização possa oferecer algum tipo de contrato "até N core", as máquinas de desenvolvimento virtualizadas não oferecerão o mesmo tipo de retorno dispositivos.

EDIT: Isso apenas relata meus sentimentos pessoais sobre o desenvolvimento usando VMs ditadas por corporações, que são frequentemente proibidas para reduzir os custos de hardware, que tendem a ser executados em servidores. A execução de uma VM local parece muito supérflua, desde que você esteja aplicando uma boa disciplina de controle de origem, a menos que seu projeto exija especificamente que você desenvolva código para vários sistemas operacionais.

*: com isso quero dizer que as subtarefas dentro dos estágios de compilação e dos estágios de teste podem ser executadas simultaneamente, NÃO compilando e testando simultaneamente:)

    
por 17.10.2011 / 13:17
fonte
11

Eu faço todo o meu desenvolvimento pessoal em VMs. Eu tenho várias configurações de VMs para diferentes ambientes e funciona bem.

Eu tenho um laptop dell studio 15 (quad I7 2.8ghz, 8gb ram, gráficos ati) rodando win 7 ultimate 64bit com o VirtualBox instalado. Tenho todas as minhas VMs funcionando com uma unidade USB externa de 500 GB velcroed para o laptop.

VM 0 - Win 7 instalação limpa de 64 bits como modelo base

VM 1 - Win 7 64 bits (2 cpu, ram de 4 gb, hd de 120 gb) com o conjunto de ferramentas do Visual Studio 2008

VM 2 - Win 7 64 bits (2 cpu, ram de 4 gb, hd de 120 gb) com o conjunto de ferramentas do Visual Studio 2010

VM 3 - Win 7 64 bits (2 cpu, 2 gb de ram, 120 gb hd) com o conjunto de ferramentas Eclipse Java

A menos que eu esteja fazendo algo que exija um IO muito alto, eu senti que o desempenho é bom e eu não saberia que estou dentro de uma VM se alguém tivesse acabado de me entregar o laptop e dito começar a se desenvolver.

    
por 17.10.2011 / 16:17
fonte
10

Eu gostaria de acrescentar que certos tipos de desenvolvimento são muito mais difíceis (se não impossíveis) através de máquinas virtualizadas.

Por acaso, trabalho em uma empresa onde oferecemos pacotes de software que se integram a vários dispositivos periféricos USB diferentes (por exemplo, webcams, impressoras de etiquetas, leitores de tarja magnética, etc ...). Mesmo que eu mapeasse portas USB para um servidor virtualizado, notei problemas bizarros e inexplicáveis com os drivers de dispositivos de terceiros.

Como eu disse, não acho que esta situação justifique NÃO trabalhar em máquinas de desenvolvimento virutalizadas, no entanto é uma que ainda não descobrimos, por isso mantemos estações de trabalho físicas para diferentes ambientes em um laboratório.

    
por 17.10.2011 / 14:33
fonte
7

Em nossa empresa, agora estamos usando a VM para desenvolvimento e teste. Embora existam algumas desvantagens para usar os benefícios da VM, eles superam significativamente.

Antes de começarmos a usar as VMs, estávamos tendo problemas constantes na configuração de máquinas de desenvolvimento para novos desenvolvedores. A primeira tarefa para o novo desenvolvedor da equipe era geralmente configurar sua própria máquina de desenvolvimento. Somos uma empresa pequena e não temos sempre a mão de obra para ajudar os novos membros da equipe a montar a máquina. Isso levou a vários problemas: às vezes, o bug era reproduzível apenas em sua máquina ou vice-versa, ou o aplicativo não podia construir corretamente, etc. Também houve um problema que alguns dos nossos desenvolvedores seniores estavam trabalhando em vários projetos em ambientes de trabalho que nem sempre eram compatíveis.

Quando mudamos para a VM - tudo mudou. Agora, apenas um indivíduo é responsável por configurar o ambiente na VM com tudo o que está relacionado ao projeto. Quando ele terminar, todos os membros da equipe receberão a cópia da VM. Isso reduz o tempo de configuração do ambiente para cada novo membro da equipe (a cópia da VM não pode levar mais de 2 horas). Também nos permite trabalhar em vários ambientes de trabalho.

As desvantagens de usar VM's: SPEED. Sim, o impacto no desempenho da VM é visível. Em estações de trabalho lentas, isso pode tornar o desenvolvimento quase impossível. Mas se você tem boa estação de trabalho (quad core, 8 + GB de RAM, SSD) você pode trabalhar normalmente (estou trabalhando atualmente em um laptop com 8GB de RAM e processador Core2Duo).

    
por 17.10.2011 / 14:15
fonte
7

Como outros já mencionaram, depende de várias coisas:

  • Como é seu ambiente?
  • Você tem direitos de acesso suficientes para fazer desenvolvimento?
  • O seu HW está pronto para ser usado?

Ambiente

O uso de uma VM pode ajudar se você estiver trabalhando em várias versões de um projeto; vários projetos; ou segmentar um sistema operacional diferente daquele que você normalmente executa (sistema operacional host). Eu faço muito trabalho no SharePoint e ser capaz de executar uma máquina diferente para as várias versões de uma versão é útil, pois posso apenas iniciar uma máquina diferente e ter uma boa noção do estado do banco de dados / GAC. Além disso, se você precisar direcionar um ambiente de aplicativo * nix, mas tiver uma máquina Windows, ainda poderá fazer desenvolvimento em uma VM (é assim que estou aprendendo Ruby em casa, embora eu geralmente faça o trabalho dev .NET). Eu geralmente defendo ao fazer o desenvolvimento / teste de desenvolvimento do ASP.NET na mesma versão do IIS em que o aplicativo será executado (essa mesma lógica se aplica a outros ambientes de destino do servidor). Dependendo da versão do sistema operacional, pode haver algumas diferenças pequenas, mas críticas. Observe que isso não significa que você deve codificar para uma versão específica do IIS / OS, mas sejamos honestos, ele realmente precisa funcionar onde você está indo para implantá-lo, não apenas em sua máquina local.

As VMs também (dependendo do software usado) permitem tirar instantâneos do estado atual da máquina e / ou cloná-los. Isso pode ser inestimável quando protótipos de algo e você não tem que estar tão preocupado com o que está acontecendo no seu GAC / Registro / etc. Eu também achei muito valioso na criação de uma demonstração do cliente antes do tempo. Como o ambiente de demonstração estava em uma VM, eu poderia continuar trabalhando até o ponto de mostrar ao cliente o que tínhamos concluído porque eu estava trabalhando em uma máquina diferente .

Direitos suficientes

Isso geralmente se aplica a pessoas que trabalham para uma empresa com um conjunto bastante rígido de políticas para direitos de acesso. Se você não conseguir ter administração irrestrita em sua máquina, este seria um bom momento para trabalhar em uma VM. Normalmente, os poderes só estão preocupados com o bloqueio do seu sistema operacional host, o convidado pode ser aberto (permissões sábio). Eu tive problemas estranhos com perfis de roaming, direitos de administrador aleijados e executando o VS 2010; usar uma VM me permitiu evitar esses problemas.

O seu HW está pronto para ser usado?

Isso se resume a suas imagens de VM estarem em um servidor e seu controle remoto nelas OU você as executa localmente. Se você estiver executando no servidor, a maior preocupação provavelmente será se houver muitas VMs rodando no mesmo hardware. Localmente, você basicamente deseja muita RAM e minimizar a frequência com que sobrecarrega o buffer de R / W do seu disco rígido. Para desenvolvimento básico de LOB / SharePoint / ASP.NET, descobri que um mínimo de 8 GB de RAM e uma configuração de disco rígido duplo funciona muito bem na prática (executando um i5, mas também trabalhei com um Core 2). O segundo disco rígido faz a maior diferença no desempenho.

Nota: não tenho estatísticas para comprovar isso, mas notei que o Virtual PC tem uma tendência a ter um desempenho abaixo do VMWare e do Virtual Box. Eu não posso falar com o Hyper-V desde que eu não trabalhei com ele. Eu não ficaria surpreso se usar o Virtual PC (como uma incursão inicial no uso de VMs) prejudicava o desenvolvedor ao usar o software de virtualização.

    
por 17.10.2011 / 15:23
fonte
5

Como de costume: depende. Por exemplo, eu certamente não recomendaria isso para nenhum desenvolvimento relacionado a jogos em tempo real ou computador.

Minha experiência pessoal: Eu tenho um iMac no final de 2009 e descobri que o Visual Studio 2010 é basicamente inutilizável no Parallels Desktop, a ponto de pressionar uma tecla no editor de código em questão de segundos para se registrar. Windows no SQL Server Management Studio iria desfocar e alternar o foco aparentemente aleatoriamente. Eu acabei indo com o boot camp.

Claro, um novo projeto meu envolverá um aplicativo iOS com uma ferramenta de configuração baseada no Windows, por isso pode ser muito doloroso não usar a virtualização, mas se a tecnologia de virtualização de desktop não tiver progredido o suficiente no ano passado mais ou menos, provavelmente irei configurar outro desktop aqui.

Quando se trata de testar um aplicativo de servidor, é uma situação diferente, estou muito feliz em virtualizar isso, mas preciso de capacidade de resposta em meus aplicativos de desenvolvimento.

    
por 17.10.2011 / 13:18
fonte
1

Eu usei VMs para desenvolvimento e, em geral, não é tremendamente diferente de desenvolver em minha própria máquina. Se você estiver usando o Controle de Origem corretamente, não haverá muitas diferenças.

As principais diferenças são que, se você estiver offline por algum motivo, você não tem uma máquina de desenvolvimento disponível para você, então não é tão bom se você viaja ou trabalha muito em casa. Além disso, eu nunca descobri como executar vários monitores na Área de Trabalho Remota, mas tenho certeza que isso é minha falha, e não um problema com o princípio. Eu geralmente usava meu monitor principal para desenvolvimento e mantinha o segundo para minha máquina desktop com e-mail, navegadores e assim por diante.

Acrescentarei que se você estiver trabalhando de uma forma em que precisa verificar se seu código funciona em diferentes plataformas - especialmente coisas como o desenvolvimento de instaladores -, é possível executar VMs para diferentes versões do sistema operacional. / p>     

por 17.10.2011 / 13:06
fonte
1

Eu os usei na empresa anterior. Vários controles de terceiros não coexistiam bem com outras versões da mesma empresa. Eu também usei um casal para testar e depurar outros sistemas operacionais (XP vs Vista vs 7). Um virtual tinha VB6 e VS2003 para os produtos mais antigos. Sim, em uma máquina típica de um desenvolvedor pode ser lento e complicado, mas eu tinha alguns discos rígidos que eu "doava" e colocava os virtuais em seus próprios discos rígidos em seus próprios controladores de disco. Eu era o último cara a continuar usando virtuals, e para alguns bugs, só eu poderia trabalhar neles (devido a problemas com o sistema operacional e componentes).

Alguns dos caras se queimaram instalando o software beta, e alguns dos betas do MS não puderam ser removidos, então eles foram forçados a usar virtuais até que eles reformataram seus discos rígidos.

Para desenvolvimento em virtuais, meu conselho é conseguir algo com um mínimo de 8GB de RAM. 16 ou mais seria melhor, já que você encontrará qualquer necessidade virtual equipada com um estúdio visual de cerca de 1,5 GB de RAM do host para rodar a velocidades acima de "glacial". Além disso, obter lotes de discos rígidos ao comprar um computador. Para unidades que você escolhe em sua pilha de hardware, procure pelo menos 2x o tamanho do VHD que estará em execução.

    
por 18.10.2011 / 00:34
fonte