La idea básica de la virtualización (y, por lo tanto, una VM), al menos en la actualidad, en realidad se remonta a muchas décadas, pero se reduce al mismo concepto, que es que varias instancias de un sistema operativo pueden compartir los recursos (procesador, memoria, I / O y almacenamiento) de un solo host.
Entonces, el truco con esto es que una VM determinada no puede consumir más recursos de los que se pueden encontrar en una sola caja. En la misma línea, si un conjunto de recursos en una caja se agota, el resto puede quedar en gran parte sin usar. Un buen ejemplo de esto sería un servidor determinado con, por ejemplo, 64 núcleos de procesador y 256 gigabytes de memoria. Si se configuran 8 máquinas virtuales cada una con 4 núcleos y 32 gigabytes de RAM (*), aproximadamente la mitad de la CPU no se usa. Este es un problema muy real para los proveedores de la nube, donde la asignación adecuada (y la reasignación) de instancias de clientes en toda la infraestructura resulta ser bastante difícil de resolver.
- Claramente, esto es una simplificación: los núcleos de memoria y CPU a menudo se suscriben en exceso, pero se aplica la lógica.
Como otros han mencionado, la forma habitual de abordar el primer problema (hacer una gran máquina virtual) es generalmente girar muchas máquinas virtuales en algún tipo de disposición agrupada. Ejemplos comunes de esto incluirían sistemas de reducción de mapas como Hadoop, que proporciona un entorno para dividir los problemas en un montón de trabajos paralelos, aglutina esos trabajos a los miembros del clúster y luego reúne los resultados para producir un resultado.
- ¿Tener RAM (8GB frente a 16 GB) o procesador (i5 / i7) es mejor para computación y CAD?
- ¿Debo comprar una Macbook Air con 128 GB o 256 GB? ¿Y qué diferencia tendría tener 4 GB de RAM en lugar de 8 GB de RAM?
- La RAM de grado de servidor tiene ECC. ¿Las CPU de nivel de servidor también tienen características similares a las de la CE?
- Mi netbook (procesador Atom, Windows 7, RAM 2 GB) se cuelga muy a menudo. ¿Cómo lo soluciono?
- Cómo revisar mi GB
La forma en que se abordan tanto este problema como el segundo (utilización ineficiente de los recursos) es a través de un cálculo componible . En este concepto, se recopilan de forma independiente grandes grupos de memoria, cómputo, periféricos de E / S y memoria. Entonces, por ejemplo, puede haber un bastidor lleno de CPU y otro con terabytes de memoria. Todo esto está conectado a algún tipo de interconexión extraordinariamente de alto ancho de banda / baja latencia y, a medida que surge la necesidad, partes de cada uno de estos recursos se componen en una instancia lógica. Un ejemplo sería un usuario que solicita un servidor de base de datos. Se les podrían asignar unos cientos de gigabytes de memoria, 32 núcleos de procesador y un par redundante de tuberías grandes / rápidas a la infraestructura de red y almacenamiento. Esta composición se puede iniciar y aparece como si fuera un servidor físico. Cuando se termina la necesidad de la base de datos, los recursos se devuelven al grupo. Si la base de clientes requiere más memoria, entonces se puede agregar sin tener que comprar más disco o CPU. Del mismo modo, los recursos no utilizados se pueden apagar y eliminar.
Obviamente, hay un montón de capturas aquí, por lo que estas ofertas no están realmente más allá de las fases de I + D / muy tempranas, especialmente a escala. Uno de los mayores problemas es la interconexión. Para poner esto en contexto, la conectividad PCIe entre memoria, CPU y periféricos dentro de un solo servidor está clasificada en decenas de gigabits y conecta componentes que están, en el extremo, separados por decenas de centímetros. Incluso a esta escala, el diseño adecuado de los diseños de los componentes pasa de lo digital simple a las preocupaciones de RF / microondas mucho más arcanas. La visión (eventual) de la computación componible se está moviendo a decenas de metros y respalda el rendimiento agregado de miles de servidores al mismo tiempo, mientras se intenta mantener la latencia al mínimo absoluto. Agregar incluso unas pocas docenas de nanosegundos de extremo a extremo potencialmente reduce sustancialmente el rendimiento real e incluso puede crear una inestabilidad masiva. La mayoría de las soluciones propuestas hasta ahora han estado buscando encarnaciones exóticas de interconexión óptica de extremo a extremo (es decir, fotónica de silicio).
La cuestión es que, incluso más allá de la cuestión de la interconexión, existen enormes desafíos en torno al diseño de software, señalización y protocolo que también presentan algunos desafíos realmente interesantes (incluir las preguntas inevitables sobre la mejor forma de mapear dinámicamente a varios modelos de consumo, etc.). Por supuesto, implícito en todo esto está la necesidad de hacer que todo el sistema sea al menos algo económicamente comparable a un mercado cada vez más impulsado por la mercantilización.
De todos modos, el punto aquí es que esta es un área realmente interesante de I + D. Los grandes proveedores de servidores, varios proveedores de nube, fabricantes de comunicaciones, universidades, startups inteligentes y fabricantes de componentes (Intel es un excelente ejemplo) están trabajando en aspectos del problema en mayor o menor medida.