¿Debería una máquina de desarrollo estar dentro de una VM? [cerrado]

41

Esta publicación de Rob Conery (tenga en cuenta la babosa) dice que el entorno de desarrollo debe ejecutarse dentro de una máquina virtual. Veo lo que dice y tiendo a estar de acuerdo, pero aún me siento un poco incómodo. Ahora que la virtualización es tan madura que incluso los sistemas de producción que se ejecutan dentro de la velocidad de las máquinas virtuales no son un problema, pero como digo, algo me molesta aquí.

¿Cuál es su opinión sobre la virtualización de su máquina de desarrollo? ¿Ya lo has hecho? Si lo hiciste, ¿alguna trampa o trampa en el camino?

Anton Gogolev
fuente
1
¿Que te molesta? Todavía es para todos los propósitos una computadora.
¿Qué es una máquina de desarrollo? ¿Trabajo del desarrollador o un entorno de desarrollo compartido?
user606723

Respuestas:

29

Mi experiencia con el desarrollo en máquinas virtuales en un entorno corporativo es que debido a que la virtualización de múltiples núcleos está llena de dificultades, es difícil obtener el tipo de rendimiento que necesitan muchas máquinas de desarrollo empresarial.

Hacer que el bucle interno de prueba de compilación de código sea lo más rápido posible requiere las mejores máquinas posibles: la compilación y la ejecución de pruebas obviamente se ejecutan más rápido en máquinas con más núcleos, ya que esas actividades se pueden ejecutar fácilmente de manera simultánea * .

Hasta que los sistemas operativos de desarrollo convencionales puedan manejar la cantidad de núcleos disponibles que sean volátiles, y hasta que el software de virtualización pueda ofrecer de manera inteligente algún tipo de contrato "hasta N núcleo", las máquinas de desarrollo virtualizadas no ofrecerán el mismo tipo de rendimiento de productividad que los dispositivos físicos.

EDITAR: Esto solo relata mis sentimientos personales sobre el desarrollo utilizando máquinas virtuales dictadas por la empresa, que a menudo están prohibidas para reducir los costos de hardware, que tienden a ejecutarse en servidores. Ejecutar una máquina virtual local parece superfluo siempre y cuando esté aplicando una buena disciplina de control de fuente, a menos que su proyecto requiera específicamente que desarrolle código para múltiples sistemas operativos.

*: con lo que quiero decir que las subtareas dentro de las etapas de compilación y prueba se pueden ejecutar simultáneamente, NO compilando y probando simultáneamente :)


fuente
+1: esta fue mi experiencia con el desarrollo en una máquina virtual. El rendimiento alcanzado simplemente no vale ninguna ganancia potencial. Una máquina de desarrollo simplemente no puede ser lo suficientemente rápida.
Scott Whitlock
Nunca lo he hecho (además de las pruebas multiplataforma), pero en principio, ¿no podría especificarse la VM a una velocidad loca? La interfaz de usuario podría ser lenta, pero podría arrojar una gran cantidad de hierro de la sala de servidores en el paso de compilación, ¿no?
Dan Ray
1
En principio, claro! Definir una máquina virtual con segmentos de memoria y 20 procesadores no es la parte difícil. La parte difícil es cuando tiene una docena de máquinas virtuales de alta especificación en el mismo servidor: si tiene 12 máquinas virtuales de un solo procesador en un servidor de 8 CPU, cada máquina virtual tiene algo de tiempo de CPU cuando un procesador está disponible. Si tiene 3 máquinas virtuales con 4 núcleos cada una, debe esperar a que 4 CPU se liberen antes de que cada máquina virtual tenga tiempo de CPU. Sin mencionar la necesidad de cambiar el contexto de todos esos núcleos ... se vuelve difícil. No he oído que se haga satisfactoriamente a gran escala, lo que no significa nada :)
1
+1 Esta también es mi experiencia. Está algo compensado por los beneficios de tener puntos de control y configuración cero para nuevos entornos de desarrollo, pero el rendimiento no es el mejor.
Steven Evers
1
@MarcoDinacci Fair point. Yo diría que con el control de fuente adecuado, no debería necesitar estar dentro de una VM a menos que esté desarrollando para múltiples sistemas operativos.
12

Hago todo mi desarrollo personal en máquinas virtuales. Tengo varias máquinas virtuales configuradas para diferentes entornos y funciona bien.

Tengo una laptop Dell Studio 15 (quad I7 2.8ghz, 8gb ram, ati graphics) con win 7 ultimate 64bit con virtualbox instalado. Tengo todas mis máquinas virtuales funcionando con una unidad USB externa de 500 gb con velcro a la computadora portátil.

VM 0 - Win 7 64bit instalación limpia como plantilla base

VM 1 - Win 7 64bit (2 cpu, 4gb ram, 120gb hd) con el conjunto de herramientas Visual Studio 2008

VM 2 - Win 7 64bit (2 cpu, 4gb ram, 120gb hd) con el conjunto de herramientas Visual Studio 2010

VM 3 - Win 7 64bit (2 cpu, 2gb ram, 120gb hd) con el conjunto de herramientas Eclipse Java

A menos que esté haciendo algo que requiera un IO muy alto, he sentido que el rendimiento es bueno y no sabría que estoy dentro de una VM si alguien me hubiera entregado la computadora portátil y me dijera que comience a desarrollar.

Alan Barber
fuente
1
También ejecuto algo similar, aunque el gran problema es que una vez que tienes una solución de Visual Studio con muchos proyectos terminas esperando minutos para que el proyecto se inicie / cuellos de botella de E / S del disco demasiado difíciles. Dicho esto, sigo usando la VM cuando esto no es un problema, es excelente tener un entorno portátil.
Ally
11

Me gustaría agregar que ciertos tipos de desarrollo son mucho más difíciles (si no imposibles) a través de máquinas virtualizadas.

Trabajo en una empresa donde ofrecemos paquetes de software que se integran con varios dispositivos periféricos USB diferentes (por ejemplo, cámaras web, impresoras de etiquetas, lectores de banda magnética, etc.). Incluso si tuviera que asignar puertos USB a un servidor virtualizado, he notado problemas extraños e inexplicables con los controladores de dispositivos del proveedor externo.

Como dije, no creo que esta situación justifique NO trabajar en máquinas de desarrollo virutalizadas, sin embargo, es una situación que aún no hemos descubierto, por lo que mantenemos estaciones de trabajo físicas para diferentes entornos en un laboratorio.

maple_shaft
fuente
1
También es un problema si necesita usar una tarjeta de seguridad de acceso remoto para conectarse a TFS o algo así.
Steven Evers
8

En nuestra empresa ahora estamos utilizando la VM para el desarrollo y las pruebas. Aunque hay algunos inconvenientes para usar VM, sus beneficios los superan significativamente.

Antes de comenzar a usar máquinas virtuales, tuvimos problemas para configurar máquinas de desarrollo para nuevos desarrolladores. La primera tarea para un nuevo desarrollador en el equipo generalmente era configurar su propia máquina de desarrollo. Somos una empresa pequeña y no siempre tenemos la mano de obra para ayudar a los nuevos miembros del equipo a configurar su máquina. Esto condujo a diferentes problemas: a veces el error era reproducible solo en su máquina o no podían reproducirlo en absoluto, la aplicación no podía compilarse correctamente, etc. También había un problema de que algunos de nuestros desarrolladores principales estaban trabajando en múltiples proyectos en entornos de trabajo que no siempre fueron compatibles.

Cuando cambiamos a máquinas virtuales, todo cambió. Ahora solo una persona es responsable de configurar el entorno en una VM con todo lo relacionado con el proyecto. Cuando termina, todos los miembros del equipo reciben la copia de la VM. Esto reduce el tiempo de configuración del entorno para cada nuevo miembro del equipo (copiar la VM no debería tomar más de 1 hora). También nos permite trabajar en múltiples entornos de trabajo en paralelo.

Los inconvenientes para usar máquinas virtuales: velocidad. El rendimiento alcanzado en la VM es visible. En estaciones de trabajo más lentas, puede hacer que el desarrollo sea casi imposible. Si tiene una buena estación de trabajo (cuatro núcleos, 8 + GB de RAM, SSD), probablemente no lo note.

Christian P
fuente
1
¿Has considerado hacer algún trabajo para optimizar tu cadena de herramientas? Si la configuración de su herramienta es tan complicada que no se pueden instalar fácilmente, tal vez necesite repensar un poco las herramientas.
Michael Kohne
No se trata solo de la cadena de herramientas, se trata más del momento de configurar la máquina y solucionar problemas en diferentes entornos. ¿Por qué alguien necesitaría pasar 2 horas instalando / configurando algo cuando otra persona ya lo hizo?
Christian P
¿Por qué no puede crear una máquina de desarrollo y tomar una imagen para crear instancias adicionales? Esto supone que todos usan el mismo hardware.
JeffO
@JeffO Tiene más flexibilidad con VM porque no depende tanto del hardware. Estaría bien si todos estuviéramos trabajando en el mismo hardware, pero estamos usando computadoras portátiles / computadoras de escritorio.
Christian P
1
Simplemente curioso: ¿tiene su equipo personas que salen / entran con tanta frecuencia que le importa configurar una nueva máquina? Si es así, sospecho que estabilizar el equipo le daría una ganancia de productividad mucho mayor. ( Supongo que configurar al humano es en realidad el cuello de botella, a diferencia de la máquina)
kizzx2
7

Como otros han mencionado, depende de varias cosas:

  • ¿Cómo es tu entorno?
  • ¿Tiene suficientes derechos de acceso para hacer desarrollo?
  • ¿Tu HW está preparado para el tabaco?

Medio ambiente

Usar una máquina virtual puede ayudar si está trabajando en varias versiones de un proyecto; múltiples proyectos; o apuntar a un sistema operativo diferente del que normalmente ejecuta (sistema operativo host). Hago mucho trabajo de SharePoint y poder ejecutar una máquina diferente para las diferentes versiones de una versión es útil, ya que puedo iniciar una máquina diferente y tener una buena idea del estado de la base de datos / GAC. Además, si necesita apuntar a un entorno de aplicación * nix pero tiene una máquina Windows, aún puede desarrollar en una VM (así es como estoy aprendiendo Ruby en casa, aunque generalmente hago trabajo de desarrollo de .NET). En general, defiendo cuando hago pruebas de desarrollo ASP.NET / desarrollo en la misma versión de IIS que la aplicación se ejecutará en última instancia (esta misma racional se aplica a otros entornos de destino del servidor). Dependiendo de la versión del sistema operativo, puede haber algunas diferencias pequeñas pero críticas. Tenga en cuenta que esto no implica que deba codificar una versión específica de IIS / OS, pero seamos honestos, realmente tiene que funcionar donde lo va a implementar, no solo en su máquina local.

Las máquinas virtuales también (según el software utilizado) le permiten tomar instantáneas del estado actual de la máquina y / o clonarlas. Esto puede ser invaluable al crear prototipos de algo y no tiene que preocuparse tanto por lo que está sucediendo en su GAC / Registro / etc. También los he encontrado muy valiosos para configurar una demostración de cliente con anticipación. Debido a que el entorno de demostración estaba en una VM, pude continuar trabajando hasta el punto de mostrarle al cliente lo que habíamos completado porque estaba trabajando en una máquina diferente .

Derechos suficientes

Esto generalmente se aplica a las personas que trabajan para una empresa con un conjunto bastante estricto de políticas de derechos de acceso. Si no puede tener un administrador sin restricciones en su máquina, este sería un buen momento para trabajar en una máquina virtual. Por lo general, los poderes solo están preocupados por bloquear el sistema operativo host, el invitado puede estar abierto (permisos). Me he encontrado con problemas extraños con perfiles móviles, derechos de administrador paralizados y con VS 2010; El uso de una máquina virtual me permitió evitar estos problemas.

¿Tu HW está preparado para el tabaco?

Esto se reduce a que sus imágenes de VM estén en un servidor y su control remoto en ellas O las ejecute localmente. Si está ejecutando en el servidor, entonces la mayor preocupación probablemente será si hay demasiadas máquinas virtuales en el mismo hardware. A nivel local, básicamente, desea mucha RAM y minimizar la frecuencia con la que sobrecarga el búfer R / W para su disco duro. Para el desarrollo básico de LOB / SharePoint / ASP.NET, he encontrado que un mínimo de 8 GB de RAM y una configuración de disco duro dual funcionan bien en la práctica (ejecutando un i5 pero también he trabajado con un Core 2). El segundo disco duro marca la mayor diferencia en el rendimiento.

Nota: No tengo estadísticas para respaldar esto, pero he notado que Virtual PC tiene una tendencia a tener un rendimiento inferior en comparación con VMWare y Virtual Box. No puedo hablar con Hyper-V ya que no he trabajado con él. No me sorprendería si usara Virtual PC (como una incursión inicial en el uso de máquinas virtuales) el desarrollador hastiado de usar software de virtualización.

Ken Henderson
fuente
5

Como de costumbre: depende. Por ejemplo, ciertamente no lo recomendaría para ningún desarrollo en tiempo real o relacionado con juegos de computadora.

Mi experiencia personal: tengo un iMac de finales de 2009, y descubrí que Visual Studio 2010 es básicamente inutilizable en Parallels Desktop, hasta el punto de que presionar una tecla en el editor de código tarda unos segundos en registrarse. Windows en SQL Server Management Studio desenfocaría y cambiaría el foco aparentemente al azar. Acabo de ir al campo de entrenamiento.

Por supuesto, un nuevo proyecto mío involucrará una aplicación iOS con una herramienta de configuración basada en Windows, por lo que puede ser demasiado doloroso no usar la virtualización, pero si la tecnología de virtualización de escritorio no se ha movido lo suficiente en el último año, Probablemente solo configure otro escritorio aquí.

Cuando se trata de probar una aplicación de servidor, esa es una situación diferente, estoy perfectamente feliz de virtualizar eso, pero necesito capacidad de respuesta en mis aplicaciones de desarrollo.

Steve Rukuts
fuente
1

He usado máquinas virtuales para el desarrollo y, en general, no es tremendamente diferente del desarrollo en mi propia máquina. Si está utilizando el control de origen correctamente, no hay muchas diferencias.

Las principales diferencias son que si está desconectado por cualquier motivo, no tiene una máquina de desarrollo disponible, por lo que no es tan bueno si viaja o trabaja mucho desde casa. Además, nunca descubrí cómo ejecutar varios monitores en Escritorio remoto, pero estoy seguro de que es mi falla en lugar de un problema con el principio. Usualmente usé mi monitor principal para el desarrollo y mantuve el segundo para mi máquina de escritorio con correo electrónico, navegadores, etc.

Agregaré que si está trabajando de una manera en la que necesita verificar que su código funcione en diferentes plataformas, particularmente cosas como el desarrollo de instaladores, entonces poder ejecutar máquinas virtuales para diferentes versiones del sistema operativo es increíblemente útil.

glenatron
fuente
2
¿No ejecuta sus máquinas virtuales en su propia máquina?
1
Algunas veces, en entornos corporativos, a las personas se les asignan máquinas virtuales que se ejecutan en un centro de datos, en lugar de tener imágenes de máquinas localmente.
Cuando lo hice, los ejecuté en un servidor VMWare.
glenatron
1

Los usé en la compañía anterior. Varios controles de terceros no coexistieron bien con otras versiones de la misma compañía. También usé un par para probar y depurar otros sistemas operativos (XP vs Vista vs 7). Una virtual tenía VB6 y VS2003 para los productos más antiguos. Sí, en una máquina típica de desarrollador puede ser lento y engorroso, pero tenía algunos discos duros de repuesto que "doné" y puse los virtuales en sus propios discos duros en sus propios controladores de disco. Fui el último tipo en seguir usando virtuales, y para algunos errores, solo pude trabajar en ellos (debido a problemas con el sistema operativo y los componentes).

Algunos de los chicos se quemaron al instalar el software beta, y algunas de las versiones beta de MS no se pudieron eliminar, por lo que se vieron obligados a usar virtuales hasta que formatearon sus discos duros.

Para desarrollar en virtuales, mi consejo es obtener algo con un mínimo de 8 GB de RAM. 16 o más sería mejor, ya que encontrará que cualquier estudio virtual equipado con virtual necesita alrededor de 1.5 GB de la RAM del host para funcionar a velocidades superiores a las "glaciales". Además, obtenga muchos discos duros al comprar una computadora. Para las unidades que elija de su pila de hardware de repuesto, busque las que tengan al menos el doble del tamaño del VHD que ejecutará.

Tangurena
fuente