web-dev-qa-db-fra.com

Une machine de développement doit-elle se trouver dans une machine virtuelle?

This post de Rob Conery (notez le slug) dit que l'environnement de développement doit être exécuté à l'intérieur d'une machine virtuelle. Je vois ce qu'il dit et j'ai tendance à être d'accord, mais je me sens toujours un peu mal à l'aise. Maintenant que la virtualisation est si mature que même les systèmes de production exécutés dans les machines virtuelles, la vitesse n'est plus un problème, mais comme je le dis, quelque chose me dérange ici.

Que pensez-vous de la virtualisation de votre machine de développement? L'avez-vous déjà fait? Si vous l'avez fait, des pièges ou des pièges le long de la route?

41
Anton Gogolev

D'après mon expérience avec le développement sur des machines virtuelles dans un environnement d'entreprise, en raison de la virtualisation de plusieurs cœurs confrontée à des difficultés, il est difficile d'obtenir le type de performances dont de nombreuses machines de développement d'entreprise ont besoin.

Pour que la boucle interne de code-compilation-test soit aussi rapide que possible, il faut les meilleures machines possibles - la compilation et l'exécution des tests s'exécutent évidemment plus rapidement sur les machines avec plus de cœurs, car ces activités peuvent être exécutées assez facilement de manière simultanée * .

Jusqu'à ce que les systèmes d'exploitation de développement traditionnels puissent gérer la volatilité du nombre de cœurs disponibles et jusqu'à ce que le logiciel de virtualisation puisse offrir intelligemment une sorte de contrat "jusqu'à N cœurs", les machines de développement virtualisées n'offriront pas le même type de rendement en productivité que les appareils physiques.

EDIT: Cela ne fait que raconter mes sentiments personnels sur le développement à l'aide de machines virtuelles dictées par l'entreprise, qui sont souvent proscrites pour réduire les coûts matériels, qui ont tendance à fonctionner sur des serveurs. L'exécution d'un local VM semble surtout superflu à condition que vous appliquiez une bonne discipline de contrôle des sources, à moins que votre projet ne vous oblige spécifiquement à développer du code pour plusieurs systèmes d'exploitation.

*: j'entends par là que les sous-tâches à l'intérieur des étapes de compilation et des étapes de test peuvent être exécutées simultanément, PAS compiler et tester simultanément :)

29
user14609

Je fais tout mon développement personnel dans les VMs. J'ai plusieurs VM configurées pour différents environnements et cela fonctionne très bien.

J'ai un ordinateur portable Dell studio 15 (quad I7 2,8 GHz, 8 Go de RAM, graphiques ATI) fonctionnant sous Win 7 Ultimate 64 bits avec Virtualbox installé. J'ai toutes mes machines virtuelles fonctionnant sur un lecteur USB externe de 500 Go attaché par velcro à l'ordinateur portable.

VM 0 - Win 7 64bit clean install comme modèle de base

VM 1 - Win 7 64 bits (2 processeurs, 4 Go de RAM, 120 Go de HD) avec Visual Studio 2008 toolset

VM 2 - Win 7 64 bits (2 processeurs, 4 Go de RAM, 120 Go de HD) avec Visual Studio 2010 toolset

VM 3 - Win 7 64 bits (2 processeurs, 2 Go de RAM, 120 Go de HD) avec Eclipse Java toolset

À moins que je ne fasse quelque chose qui nécessite des IO très élevés, j'ai senti que les performances sont bonnes et je ne saurais pas que je suis dans un VM si quelqu'un venait de me remettre l'ordinateur portable et m'a dit commencer à développer.

13
Alan Barber

Je voudrais ajouter que certains types de développement sont beaucoup plus difficiles (voire impossibles) à travers des machines virtualisées.

Il se trouve que je travaille dans une entreprise où nous proposons des progiciels qui s'intègrent à différents périphériques USB (par exemple, des webcams, des imprimantes d'étiquettes, des lecteurs de bande magnétique, etc.). Même si je devais mapper des ports USB à un serveur virtualisé, j'ai remarqué des problèmes bizarres et inexplicables avec les pilotes de périphériques de fournisseurs tiers.

Comme je l'ai dit, je ne pense pas que cette situation ne justifie PAS de travailler sur des machines de développement virutalisées, mais c'est une que nous n'avons pas encore déterminée, donc nous maintenons des postes de travail physiques pour différents environnements dans un laboratoire.

11
maple_shaft

Dans notre entreprise, nous utilisons maintenant le VM pour le développement et les tests. Bien qu'il y ait certains inconvénients à utiliser les VM, leurs avantages les surpassent considérablement.

Avant de commencer à utiliser des machines virtuelles, nous avions des problèmes avec la configuration de machines de développement pour les nouveaux développeurs. La première tâche du nouveau développeur dans l'équipe était généralement de mettre en place sa propre machine de développement. Nous sommes une petite entreprise et nous n'avons pas toujours la main-d'œuvre pour aider les nouveaux membres d'une équipe à installer leur machine. Cela a conduit à des problèmes différents: parfois, le bogue n'était reproductible que sur leur machine ou ils ne pouvaient pas du tout le reproduire, l'application ne pouvait pas se construire correctement, etc. Il y avait aussi un problème que certains de nos développeurs seniors travaillaient sur plusieurs projets. sur des environnements de travail pas toujours compatibles.

Lorsque nous sommes passés aux machines virtuelles, tout a changé. Désormais, une seule personne est responsable de la configuration de l'environnement dans un VM avec tout ce qui est lié au projet. Une fois terminé, tous les membres de l'équipe reçoivent la copie de la VM. Cela réduit la temps pour configurer l'environnement pour chaque nouveau membre de l'équipe (copier le VM ne devrait pas prendre plus d'une heure). Cela nous permet également de travailler sur plusieurs environnements de travail en parallèle.

Les inconvénients de l'utilisation des VM: la vitesse. Les performances ont atteint le VM est visible. Sur les postes de travail plus lents, cela peut rendre le développement presque impossible. Si vous avez un bon poste de travail (quad core, 8 + Go de RAM, SSD), vous ne le ferez probablement pas remarquez-le.

8
Christian P

Comme d'autres l'ont mentionné, cela dépend de plusieurs choses:

  • À quoi ressemble votre environnement?
  • Avez-vous des droits d'accès suffisants pour faire du développement?
  • Votre matériel informatique est-il à la hauteur?

Environnement

L'utilisation d'un VM peut aider si vous travaillez sur plusieurs versions d'un projet; plusieurs projets; ou en ciblant un OS différent de celui que vous exécutez normalement (OS hôte). Je fais beaucoup de SharePoint travailler et pouvoir exécuter une machine différente pour les différentes versions d'une version est utile car je peux simplement démarrer une autre machine et avoir une bonne idée de l'état du GAC/base de données. Aussi si vous avez besoin de cibler une application * nix environnement mais avec une machine Windows, vous pouvez toujours faire du développement dans un VM (c'est ainsi que j'apprends Ruby à la maison même si je le fais généralement). NET dev work) .Je préconise généralement lors des tests de développement ASP.NET/développement sur la même version de IIS que l'application fonctionnera finalement (cette même logique s'applique aux autres environnements cibles du serveur) . En fonction de la version du système d'exploitation, il peut y avoir des différences petites mais critiques. Notez que cela ne signifie pas que vous devez coder vers une version spécifique de IIS/OS mais soyons honnêtes, cela doit vraiment, vraiment fonctionner là où vous allez le déployer, pas seulement sur votre machine locale.

Les machines virtuelles vous permettent également (selon le logiciel utilisé) de prendre des instantanés de l'état actuel de la machine et/ou de les cloner. Cela peut être inestimable lors du prototypage de quelque chose et vous n'avez pas à vous soucier de ce qui se passe dans votre GAC/Registre/etc. Je les ai également trouvés très utiles pour la mise en place d'une démonstration client à l'avance. Parce que l'environnement de démonstration était dans un VM je pouvais continuer à travailler jusqu'au point de montrer au client ce que nous avions terminé parce que je travaillais dans un autre machine .

Droits suffisants

Cela s'applique généralement aux personnes qui travaillent pour une entreprise avec un ensemble plutôt strict de politiques pour les droits d'accès. Si vous ne pouvez pas avoir d'administrateur sans entraves sur votre machine, ce serait le bon moment pour travailler dans une machine virtuelle. En règle générale, les pouvoirs ne sont préoccupés que par le verrouillage de votre système d'exploitation hôte, l'invité peut être grand ouvert (en termes d'autorisations). J'ai rencontré des problèmes étranges avec les profils itinérants, les droits d'administrateur paralysés et l'exécution de VS 2010; l'utilisation d'un VM m'a permis d'éviter ces problèmes.

Votre matériel informatique est-il à la hauteur?

Cela se résume soit à vos images VM sont sur un serveur et votre télécommande en eux OU vous les exécutez localement. Si vous exécutez sur le serveur, alors le plus gros problème sera probablement qu'il y ait trop de VM fonctionnant sur le même matériel. Localement, vous voulez essentiellement beaucoup de RAM et pour minimiser la fréquence de surcharge du Tampon R/W pour votre disque dur. Pour le développement de base LOB/SharePoint/ASP.NET, j'ai constaté qu'un minimum de 8 Go de RAM et une configuration à double disque dur fonctionne très bien dans pratique (exécutant un i5 mais j'ai aussi travaillé avec un Core 2.) Le deuxième disque dur fait la plus grande différence de performances.

Remarque: Je n'ai pas de statistiques à l'appui, mais j'ai remarqué que Virtual PC a tendance à sous-performer par rapport à VMWare et à Virtual Box. Je ne peux pas parler à Hyper-V car je n'ai pas travaillé avec. Je ne serais pas surpris si l'utilisation de Virtual PC (comme une première incursion dans l'utilisation de VM) blaguait le développeur en utilisant un logiciel de virtualisation.

7
Ken Henderson

Comme d'habitude: cela dépend. Par exemple, je ne le recommanderais certainement pas pour tout développement en temps réel ou lié aux jeux informatiques.

Mon expérience personnelle: j'ai un iMac fin 2009, et j'ai trouvé que Visual Studio 2010 est fondamentalement inutilisable dans Parallels Desktop, au point que presser une touche dans l'éditeur de code prend quelques secondes pour s'enregistrer. Windows dans SQL Server Management Studio défocaliserait et changerait de focus apparemment au hasard. Je viens de finir avec le camp d'entraînement.

Bien sûr, un nouveau projet à moi impliquera une application iOS avec un outil de configuration basé sur Windows, il peut donc être trop pénible de ne pas utiliser la virtualisation, mais si la technologie de virtualisation de bureau n'a pas suffisamment évolué au cours de la dernière année, Je vais probablement configurer un autre bureau ici.

Quand il s'agit de tester une application serveur, c'est une situation différente, je suis parfaitement heureux de virtualiser cela, mais j'ai besoin de réactivité dans mes applications de développement.

5
Steve Rukuts

Je les ai utilisés dans l'entreprise précédente. Plusieurs contrôles tiers ne coexistaient pas bien avec d'autres versions de la même société. J'ai également utilisé un couple pour tester et déboguer d'autres systèmes d'exploitation (XP vs Vista vs 7). Un virtuel avait VB6 et VS2003 pour les anciens produits. Oui, sur la machine d'un développeur typique, cela peut être lent et encombrant, mais j'avais quelques disques durs de rechange que j'ai "donnés" et j'ai mis les fichiers virtuels sur leurs propres disques durs sur leurs propres contrôleurs de disque. J'étais le dernier gars à continuer à utiliser les virtuels, et pour certains bugs, seulement je pouvais travailler dessus (en raison de problèmes de système d'exploitation et de composants).

Certains gars ont été brûlés en installant un logiciel bêta, et certains des bêtas de MS n'ont pas pu être supprimés, ils ont donc été obligés d'utiliser des virtuels jusqu'à ce qu'ils reformatent leurs disques durs.

Pour développer en virtual, mon conseil est d'obtenir quelque chose avec un minimum de 8 Go de RAM. 16 ou plus serait mieux, car vous trouverez tous les besoins virtuels équipés de Visual Studio sur environ 1,5 Go de l'hôte RAM pour fonctionner à des vitesses supérieures à "glacial". En outre, obtenez beaucoup de disques durs lors de l'achat d'un ordinateur. Pour les disques que vous choisissez dans votre pile de matériel de rechange, recherchez-en au moins 2 fois la taille du disque dur virtuel que vous utiliserez.

1
Tangurena

J'ai utilisé des machines virtuelles pour le développement et, dans l'ensemble, ce n'est pas très différent du développement sur ma propre machine. Si vous utilisez correctement le contrôle de code source, il n'y a pas beaucoup de différences.

Les principales différences sont que si vous êtes hors ligne pour une raison quelconque, vous n'avez pas de machine de développement à votre disposition, donc pas génial si vous voyagez ou travaillez beaucoup à la maison. De plus, je n'ai jamais compris comment exécuter plusieurs moniteurs sur Remote Desktop, mais je suis sûr que c'est mon échec plutôt qu'un problème avec le principe. J'utilisais généralement mon moniteur principal pour le développement et gardais le second pour ma machine de bureau avec messagerie, navigateurs et ainsi de suite.

J'ajouterai que si vous travaillez d'une manière où vous devez vérifier que votre code fonctionne sur différentes plates-formes - en particulier des trucs comme le développement d'installateurs - alors pouvoir exécuter des VM pour différentes versions de système d'exploitation est incroyablement pratique.

1
glenatron