Quiero construir un servidor que se utilizará para alojar máquinas virtuales. Estas máquinas virtuales desempeñarían diferentes roles, como:
- Servidor de base de datos
- servidor de aplicaciones JBoss
- Instancias de desarrollo de Eclipse (Java EE, Scala, etc.)
La cantidad de usuarios que accederán al servidor será de aproximadamente 5 personas a la vez. El sistema operativo puede ser Windows o Linux, el que funcione mejor. Los usuarios necesitarán acceso gráfico/de escritorio a las instancias de desarrollo de Eclipse.
- ¿Cómo puedo determinar qué especificaciones de hardware necesito para admitir adecuadamente una cantidad determinada de usuarios y máquinas virtuales? ¿Existen pautas sobre recursos mínimos por usuario, etc.?
- Suponiendo que los desarrolladores estén ubicados físicamente cerca del servidor, ¿sería factible configurar una caja de asientos múltiples con múltiples conjuntos de pantalla/teclado/ratón y asignar un invitado, teclado, mouse y cabezal de pantalla a cada usuario? ¿Cómo se diseñaría el software y el hardware de esta configuración?
Respuesta1
¿Cómo puedo determinar qué especificaciones de hardware necesito para admitir adecuadamente una cantidad determinada de usuarios y máquinas virtuales? ¿Existen pautas sobre recursos mínimos por usuario, etc.?
Veamos los distintos casos del software que desea ejecutar:
- Servidor de base de datos
Si tiene un servidor de base de datos compartido entre todos los desarrolladores, debe ejecutar su servidor de base de datos con acceso a muchos núcleos de CPU y tanta RAM como sea posible. Un disco rápido (pero no necesariamente grande) es importante. El tamaño del disco dependerá de si planea almacenar datos a escala de producción completa para el desarrollo o si puede arreglárselas con unos pocos gigabytes. Tener un cuello de botella en la base de datos sería algo malo, pero tenga en cuenta que una carga de trabajo de una base de datos de desarrollo puede ser muy diferente de una carga de trabajo de una base de datos de producción. Es probable que la primera sea de menor escala e implique consultas más ineficientes (mientras las consultas aún se están desarrollando y los datos se exploran mediante consultas ad hoc), mientras que una base de datos de producción probablemente tenga consultas optimizadas que se ejecuten y operen en enormes conjuntos de datos que (con suerte) están en gran parte almacenados en caché en la RAM.
- servidor de aplicaciones JBoss
JBoss utilizará principalmente tiempo de CPU (mientras ejecuta servlets), mucha RAM (porque es Java) y ancho de banda de red. Al igual que una base de datos, un servidor de aplicaciones avanzado puede beneficiarse de múltiples núcleos. La mejor manera de determinar la cantidad correcta de núcleos virtuales a asignar es probarlo en diferentes cantidades de núcleos. Pero, como regla general, nunca asigne más núcleos virtuales que los núcleos físicos que tiene.
- Entornos de escritorio de desarrollo de Eclipse
Esto es complicado. El propio Eclipse consumirá varios cientos de megas de RAM, pero ese número debería permanecer bastante estático y nivelado una vez que todos los complementos estén cargados. Por lo tanto, es posible que desees comprobar cuánta RAM se necesita en función de la cantidad de complementos que ejecutas. Las aplicaciones Eclipse RCP más simples pueden usar tan solo 10 o 20 MB de RAM, pero un entorno JavaEE completo con herramientas GEF, herramientas de control de versiones y herramientas de bases de datos puede consumir más de un gigabyte de memoria. La compilación de archivos fuente de Java no depende tanto de la CPU como el código nativo, pero aún así puede beneficiarse de múltiples núcleos. Sin embargo, en general, sus instancias de Eclipse probablemente utilizarán relativamente menos recursos (CPU, RAM, disco) que la base de datos o las instancias de JBoss.
En general, con cinco usuarios más algunas aplicaciones del lado del servidor que se sabe que consumen muchos recursos, debería parecer de alta gama. Sin nombrar marcas, algo como: cuatro núcleos, 24 GB de RAM o más, tal vez un SSD o una matriz RAID de hardware rápida de discos duros.
Suponiendo que los desarrolladores estén ubicados físicamente cerca del servidor, ¿sería factible configurar una caja de asientos múltiples con múltiples conjuntos de pantalla/teclado/ratón y asignar un invitado, teclado, mouse y cabezal de pantalla a cada usuario? ¿Cómo se diseñaría el software y el hardware de esta configuración?
Primero un poco de asunto preliminar:aquíyaquí.
Lo que aprenderás rápidamente es quehay muchas opcionesy no existe un líder fuerte en este espacio. No existe una forma obvia que utilice el 99,9% de la gente. Algunos no utilizan la virtualización en absoluto. Algunos usan múltiples instancias de Xorg. Algunos usan Windows Multipoint Server. Algunos usos... ya entiendes la idea. Definitivamente es una configuración factible, especialmente para sólo cinco usuarios... la ventaja es que no es necesario tener PC de escritorio para cada persona, solo un monitor/teclado/ratón. La desventaja es que hay que tener un servidor central más robusto para dar soporte a todos los usuarios y la configuración del software es más compleja.
Para una configuración de varios puestos, necesitará suficientes tarjetas gráficas para tener suficientes puertos para todos los monitores que necesita. También necesitarás un concentrador USB para todos los teclados y ratones.
Tenga en cuenta que una vez que se comprometa con una configuración de múltiples puestos, realizará una inversión en tarjetas gráficas (y posiblemente en software de múltiples puestos) que lo vinculará a que los desarrolladores estén ubicados físicamente en el servidor. Entonces, si más adelante decides traer a otro desarrollador que trabaje en otra parte del mundo, no podrá unirse (fácilmente) a tu configuración existente simplemente acercando una silla y trayendo un teclado/ratón/monitor. También puede resultar difícil ampliar su configuración a más desarrolladores una vez que alcance el límite de puertos de su tarjeta de video.