Une machine de développement doit-elle être dans une VM? [fermé]


41

Ce message de Rob Conery (notez le slug) indique 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 fonctionnent dans les ordinateurs virtuels, la vitesse est quasiment un problème, mais comme je le dis, quelque chose me dérange ici.

Quelle est votre vision de la virtualisation de votre machine de développement? L'avez-vous déjà fait? Si c'est le cas, des pièges ou des pièges sur la route?


1
Qu'est-ce qui vous dérange? C'est toujours à toutes fins utiles un ordinateur.


Qu'est-ce qu'une machine de développement? Travail de développeur ou environnement de développement partagé?
user606723

Réponses:


29

Mon expérience du développement sur des machines virtuelles dans un environnement d'entreprise est la suivante: en raison de la difficulté de la virtualisation de plusieurs cœurs, 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 code-compilation-test soit aussi rapide que possible, il faut disposer des meilleures machines possibles - la compilation et l'exécution des tests s'exécutent évidemment plus rapidement sur les machines dotées de plus de cœurs, car ces activités peuvent facilement être exécutées de manière concurrente * .

Tant que les systèmes d’exploitation traditionnels ne seront pas en mesure de gérer le nombre de cœurs disponibles, et jusqu’à ce que les logiciels de virtualisation puissent proposer intelligemment un type de contrat «jusqu’à N cœur», les machines de développement virtualisées n’offriront pas le même type de gains de productivité que les périphériques physiques.

EDIT: Ceci ne fait que rappeler mes sentiments personnels sur le développement à l’aide de machines virtuelles dictées par les entreprises, qui sont souvent interdites pour réduire les coûts de matériel, qui ont tendance à fonctionner sur des serveurs. L'exécution d'une machine virtuelle locale semble généralement superflue si vous appliquez une discipline stricte en matière 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 tâches secondaires à l'intérieur des étapes de compilation et des étapes de test peuvent être exécutées simultanément, PAS pour la compilation et le test simultanés :)


+1 - ce fut mon expérience de développement sur une machine virtuelle. La performance ne vaut tout simplement pas de gains potentiels. Une machine de développement ne peut tout simplement pas être assez rapide.
Scott Whitlock

Je ne l'ai jamais fait (à part pour les tests multi-plateformes), mais en principe, la VM ne pourrait-elle pas être spécifiée à une vitesse folle? L'interface utilisateur peut être lente, mais vous pourriez jeter beaucoup de fer à la compilation au moment de la compilation, n'est-ce pas?
Dan Ray

1
En principe, bien sûr! Définir une VM avec des seaux de mémoire et 20 processeurs n’est pas la partie la plus difficile. Le problème, c’est lorsque vous avez une douzaine d’ordinateurs virtuels de haute spécification sur le même serveur: si vous avez 12 ordinateurs virtuels à processeur unique sur un serveur de 8 processeurs, chaque machine virtuelle obtient un peu de temps CPU lorsqu'un processeur devient disponible. Si vous avez 3 ordinateurs virtuels avec 4 cœurs chacun, vous devez attendre que 4 processeurs soient libérés avant que chaque ordinateur virtuel ne prenne le temps nécessaire. Sans parler de la nécessité de changer de contexte dans tous ces cœurs ... cela devient difficile. Je n'ai pas entendu dire qu'il soit fait de manière satisfaisante à grande échelle - ce qui ne veut rien dire :)

1
+1 C'est aussi mon expérience. Il est quelque peu compensé par les avantages d'avoir des points de contrôle et une configuration zéro pour les nouveaux environnements de développement, mais les performances ne sont pas optimales.
Steven Evers

1
@MarcoDinacci Fair point. Je soutiendrais qu'avec un contrôle de source approprié, vous ne devriez pas avoir besoin d'être dans une machine virtuelle, à moins que vous ne développiez pour plusieurs systèmes d'exploitation.

12

Je fais tout mon développement personnel dans les VM. J'ai plusieurs configurations de machines virtuelles pour différents environnements et cela fonctionne bien.

J'ai un ordinateur portable Dell Studio 15 (quad I7 2.8ghz, 8 Go de RAM, ati graphics) en cours d'exécution gagner 7 ultime 64 bits avec virtualbox installé sur. Toutes mes machines virtuelles sont connectées à un lecteur USB externe de 500 Go velcroed à l'ordinateur portable.

VM 0 - Installation propre Win 7 64 bits en tant que modèle de base

VM 1 - Win 7 64 bits (2 cpu, 4 Go de RAM, 120 Go de disque dur) avec les outils Visual Studio 2008

VM 2 - Win 7 64 bits (2 cpu, 4 Go de RAM, 120 Go de disque dur) avec les outils Visual Studio 2010

VM 3 - Win 7 64 bits (2 cpu, 2 Go de RAM, 120 Go de disque dur) avec les outils Java Eclipse

À moins que je ne fasse quelque chose qui nécessite des entrées-sorties très élevées, j'ai pensé que les performances étaient bonnes et que je ne saurais pas si je suis dans une machine virtuelle si quelqu'un venait de me remettre l'ordinateur portable et de commencer à développer.


1
J'exécute également quelque chose de similaire, mais le gros problème est qu'une fois que vous avez une solution Visual Studio avec de nombreux projets, vous attendez quelques minutes pour que le projet démarre / les goulots d'étranglement des E / S de disque trop fort. Cela dit, j'utilise toujours la machine virtuelle chaque fois que ce n'est pas un problème, c'est excellent d'avoir un environnement portable.
Ally

11

J'aimerais ajouter que certains types de développement sont beaucoup plus difficiles (voire impossibles) par le biais de machines virtualisées.

Il se trouve que je travaille dans une entreprise où nous proposons des progiciels s’intégrant avec différents périphériques USB (par exemple, des webcams, des imprimantes d’étiquettes, des lecteurs de pistes magnétiques, etc.). Même si je mappais les ports USB sur un serveur virtualisé, j'ai constaté des problèmes bizarres et inexplicables avec les pilotes de périphérique d'un fournisseur tiers.

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


1
C’est également difficile si vous devez utiliser une carte de sécurité d’accès à distance pour vous connecter à TFS ou quelque chose du genre.
Steven Evers

8

Dans notre entreprise, nous utilisons maintenant la machine virtuelle pour le développement et les tests. Bien que l’utilisation des ordinateurs virtuels présente certains inconvénients, leurs avantages l’emportent largement.

Avant de commencer à utiliser des machines virtuelles, nous avions des problèmes de configuration des machines de développement pour les nouveaux développeurs. La première tâche du nouveau développeur de l'équipe était généralement de configurer sa propre machine de développement. Nous sommes une petite entreprise et nous n'avons pas toujours la main-d'œuvre nécessaire pour aider les nouveaux membres de l'équipe à configurer leur machine. Cela posait différents problèmes: parfois, le bogue n'était reproductible que sur leur machine ou ils ne pouvaient pas le reproduire du tout, l'application ne pouvait pas se construire correctement, etc. De plus, certains de nos développeurs principaux travaillaient également 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 une machine virtuelle avec tout ce qui est lié au projet. Lorsqu'il a terminé, tous les membres de l'équipe reçoivent la copie de la machine virtuelle. Cela réduit le temps nécessaire à la configuration de l'environnement pour chaque nouveau membre de l'équipe (la copie de la machine virtuelle ne doit pas prendre plus d'une heure). Cela nous permet également de travailler sur plusieurs environnements de travail en parallèle.

Les inconvénients liés à l’utilisation de machines virtuelles: la vitesse. La performance atteinte sur la machine virtuelle est visible. Sur des postes de travail plus lents, le développement peut être presque impossible. Si vous avez un bon poste de travail (quad core, 8 Go + RAM, SSD), vous ne le remarquerez probablement pas.


1
Avez-vous envisagé de travailler pour optimiser votre chaîne d’outils? Si la configuration de vos outils est si compliquée qu’ils ne peuvent pas être installés facilement, vous devrez peut-être repenser légèrement les outils.
Michael Kohne

Il ne s’agit pas uniquement d’une chaîne d’outils, il s’agit plutôt du temps de configuration de la machine et du dépannage de problèmes sur différents environnements. Pourquoi quelqu'un aurait-il besoin de passer 2 heures à installer / configurer quelque chose alors que quelqu'un d'autre l'avait déjà fait?
Christian P

Pourquoi ne pouvez-vous pas créer une machine de développement et prendre une image pour créer des instances supplémentaires? Cela suppose que vous utilisiez tous le même matériel.
JeffO

@JeffO Vous avez plus de flexibilité avec les VM car elles ne dépendent pas du matériel. Ce serait bien si nous travaillions tous sur le même matériel, mais nous utilisons des ordinateurs portables / ordinateurs de bureau.
Christian P

1
Juste curieux - votre équipe a-t-elle des personnes qui partent / entrent si souvent que vous vous souciez de l'installation d'une nouvelle machine? Si tel était le cas, je pense qu'une stabilisation de l'équipe vous permettrait de gagner beaucoup plus en productivité. ( Je suppose que la configuration de l' humain est le goulet d'étranglement, par opposition à la machine)
kizzx2

7

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 HW est-il prêt à fumer?

Environnement

L'utilisation d'un ordinateur virtuel peut vous aider si vous travaillez sur plusieurs versions d'un projet. plusieurs projets; ou ciblant un système d'exploitation différent de celui que vous exécutez normalement (système d'exploitation hôte). Je fais beaucoup de travail sur SharePoint et il est utile de pouvoir exécuter une machine différente pour les différentes versions d'une version, car je peux simplement démarrer une machine différente et avoir une bonne idée de l'état du GAC / de la base de données. De même, si vous devez cibler un environnement d'application * nix mais une machine Windows, vous pouvez toujours effectuer le développement dans une machine virtuelle (c'est ainsi que j'apprends Ruby à la maison, même si je travaille généralement sous .NET). Lorsque je teste / développe des développements ASP.NET sur la même version d’IIS, j’encourage généralement l’application à s’exécuter (cette même raison s’applique également aux autres environnements cibles de serveur). Selon la version du système d'exploitation, il peut exister des différences minimes mais critiques. Notez que cela ne signifie pas que vous devriez coder vers une version spécifique d'IIS / OS, mais soyons honnêtes, il faut vraiment que cela fonctionne vraiment là où vous allez le déployer, pas seulement sur votre ordinateur local.

Les machines virtuelles permettent également (en fonction du logiciel utilisé) de prendre des instantanés de l'état actuel de la machine et / ou de les cloner. Cela peut être inestimable lorsque vous prototypez 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 préparer une démonstration client à l'avance. Étant donné que l'environnement de démonstration était dans une machine virtuelle, je pouvais continuer à travailler jusqu'à montrer au client ce que nous avions accompli car je travaillais sur une machine différente .

Droits suffisants

Cela s’applique généralement aux personnes qui travaillent pour une entreprise avec un ensemble de règles relativement contraignantes pour les droits d’accès. Si vous ne pouvez pas avoir un administrateur libre sur votre machine, ce serait un bon moment pour travailler dans une VM. En règle générale, les puissances ne sont préoccupées 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 invalidés et l'exécution de VS 2010; L'utilisation d'une machine virtuelle m'a permis d'éviter ces problèmes.

Votre HW est-il prêt à fumer?

Cela se résume à ce que vos images de machine virtuelle se trouvent sur un serveur et votre télécommande y soit OU que vous les exécutiez localement. Si vous exécutez sur le serveur, la plus grande préoccupation sera probablement de savoir s'il y a trop de machines virtuelles exécutées sur le même matériel. Au niveau local, vous souhaitez essentiellement disposer de beaucoup de RAM et minimiser la fréquence à laquelle vous surchargez la mémoire tampon R / W de votre disque dur. Pour le développement LOB / SharePoint / ASP.NET de base, j'ai constaté qu'un minimum de 8 Go de RAM et une configuration à deux disques durs fonctionnaient très bien dans la pratique (utiliser un i5 mais j'ai également travaillé avec un Core 2). Le deuxième disque dur fait la plus grande différence en termes de performances.

Remarque: je n'ai aucune statistique à l'appui, mais j'ai remarqué que Virtual PC avait 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 (en tant que première incursion dans l'utilisation de machines virtuelles) rendait le développeur fatigué d'utiliser un logiciel de virtualisation.


5

Comme d'habitude: ça dépend. Par exemple, je ne le recommanderais certainement pas pour un développement en temps réel ou lié au jeu informatique.

Mon expérience personnelle: j’ai un iMac de la fin de 2009 et j’ai constaté que Visual Studio 2010 est inutilisable dans Parallels Desktop, au point qu’il suffit de quelques secondes pour enregistrer une touche dans l’éditeur de code. Windows dans SQL Server Management Studio se défocaliserait et changerait de focus apparemment de manière aléatoire. Je viens de finir avec le camp d'entraînement.

Bien sûr, un de mes nouveaux projets implique une application iOS avec un outil de configuration basé sur Windows. Il est donc peut-être trop pénible de ne pas utiliser la virtualisation, mais si la technologie de virtualisation des postes de travail n’a pas suffisamment évolué au cours de la dernière année, Je vais probablement juste installer un autre bureau ici.

En ce qui concerne le test d’une application serveur, la situation est différente, je suis parfaitement heureux de la virtualiser, mais j’ai besoin de réactivité dans mes applications de développement.


1

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 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 vous n’êtes pas si génial si vous voyagez ou travaillez souvent à la maison. En outre, je n’ai jamais compris comment exécuter plusieurs moniteurs sur le Bureau à distance, mais je suis certain que c’est mon échec, et non un problème de principe. J'utilisais généralement mon moniteur principal pour le développement et gardais le deuxième pour mon ordinateur de bureau avec la messagerie, les navigateurs, etc.

J'ajouterai que si vous devez vérifier que votre code fonctionne sur différentes plates-formes, notamment le développement d'installateurs, il est extrêmement pratique de pouvoir exécuter des machines virtuelles pour différentes versions de système d'exploitation.


2
Vous n'exécutez pas votre VM sur votre propre machine?

1
Parfois, dans les environnements d'entreprise, des ordinateurs virtuels sont alloués aux personnes s'exécutant dans un centre de données, plutôt que de disposer d'images de la machine localement.

Quand je l'ai fait, je les ai exécutés sur un serveur VMWare.
glenatron

1

Je les ai utilisés à la société précédente. Plusieurs contrôles tiers n'ont pas bien coexisté 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 produits plus anciens. Oui, sur un ordinateur de développeur typique, cela peut être lent et fastidieux, mais j’avais «donné» quelques disques durs de rechange et mis les disques virtuels sur leurs propres disques durs sur leurs propres contrôleurs de disque. J'étais le dernier à continuer à utiliser les logiciels virtuels, et pour certains bogues, je pouvais seulement y travailler (en raison de problèmes liés au système d'exploitation et aux composants).

Certains d'entre eux ont été brûlés en installant une version bêta du logiciel, et certaines des versions bêta de MS n'ont pas pu être supprimées. Ils ont donc été forcés d'utiliser des logiciels 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 constaterez que tout studio équipé de Visual Studio nécessite environ 1,5 Go de RAM de l'hôte pour fonctionner à une vitesse supérieure à "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 deux fois la taille du disque dur virtuel que vous utiliserez.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.