Inicio / Software y Cloud / Virtualización: cómo un solo servidor esconde decenas de ordenadores

Virtualización: cómo un solo servidor esconde decenas de ordenadores

Si alguna vez has oído que un servidor de un centro de datos puede «contener» decenas de ordenadores a la vez, no es una metáfora. Es la virtualización, una de las tecnologías que sostienen la nube, los centros de datos modernos y buena parte de internet. Para entenderla bien hay que mirar una pieza clave que casi nunca se menciona: el hipervisor.

El problema de fondo: un servidor casi siempre está infrautilizado

Un servidor físico tiene una CPU, memoria RAM, discos y red. En un ordenador normal, el sistema operativo (Windows, Linux, macOS) se instala directamente sobre ese hardware y lo controla todo. El problema es que la mayoría de los servicios no aprovechan ni de lejos toda la máquina: un servidor web puede pasar la mayor parte del tiempo al 5 o 10 % de uso de CPU. Eso significa que, sin virtualización, para montar diez servicios distintos necesitarías diez servidores físicos, casi todos malgastando recursos.

La virtualización resuelve ese desperdicio. Permite dividir un único servidor físico en varias máquinas virtuales (VM), cada una con su propio sistema operativo, como si fueran ordenadores independientes que solo comparten el mismo hardware debajo. Y la pieza que hace posible ese reparto es el hipervisor.

Qué es exactamente un hipervisor

El hipervisor (también llamado monitor de máquinas virtuales, o VMM por Virtual Machine Monitor) es una capa de software que se coloca entre el hardware físico y los sistemas operativos invitados. Su trabajo es triple: repartir los recursos reales (CPU, memoria, disco, red) entre las distintas VM, aislarlas unas de otras y traducir las peticiones de cada sistema operativo al hardware real.

Cada máquina virtual cree tener su propia CPU, su propia RAM y su propio disco. En realidad lo que ve es una abstracción que el hipervisor le presenta. Ese es el truco: engañar educadamente a cada sistema operativo para que crea que controla todo el hardware, cuando en realidad comparte la máquina con otros.

Dos familias de hipervisores: Tipo 1 y Tipo 2

Los hipervisores se dividen en dos grandes categorías según dónde vivan.

Tipo 1 (o bare-metal, «a pelo»): se instala directamente sobre el hardware, sin un sistema operativo intermedio. Es el que usan los centros de datos y las plataformas de nube. Ejemplos conocidos son VMware ESXi, Microsoft Hyper-V, KVM (que viene integrado en el propio kernel de Linux) y Xen. Al ir sin capa intermedia, tienen el control total del hardware y ofrecen el mejor rendimiento y aislamiento.

Tipo 2 (o hosted): corre como una aplicación normal dentro de un sistema operativo ya instalado. Es el caso de VirtualBox o VMware Workstation, los que usas en tu portátil para probar otro sistema. Son más cómodos y fáciles de montar, pero añaden una capa extra de software, así que el rendimiento y el aislamiento son algo peores. Se usan sobre todo para desarrollo y pruebas.

Cómo se reparte la CPU: virtualización asistida por hardware

Lo más delicado de la virtualización siempre fue la CPU. Un sistema operativo espera ejecutar instrucciones privilegiadas —operaciones de bajo nivel que solo el kernel debería poder hacer— directamente sobre el procesador. Si varias VM intentan hacerlo a la vez sobre la misma CPU física, habría un caos de permisos.

Hoy se resuelve con la virtualización asistida por hardware. Los procesadores modernos (Intel con VT-x y AMD con AMD-V) incluyen instrucciones específicas para virtualizar. El hipervisor ya no tiene que simular el comportamiento de la CPU por software, sino que delega en un modo de ejecución especial del propio chip: la VM puede ejecutar instrucciones privilegiadas directamente, y el procesador se encarga de aislar cada una y de avisar al hipervisor cuando algo intenta salirse de su máquina virtual. Eso redujo enormemente la sobrecarga y es la razón por la que hoy puedes tener decenas de VM en un solo servidor con un coste de rendimiento muy bajo.

Memoria, disco y red: cómo se comparte lo demás

La memoria RAM se reparte asignando a cada VM una porción, y el hipervisor mantiene una tabla que traduce las direcciones de memoria virtual de cada invitado a las direcciones físicas reales. Aquí también la CPU moderna ayuda con una técnica llamada segunda dirección de traducción (SLAT, Second Level Address Translation), que acelera esas conversiones en hardware.

Para el disco, la técnica más habitual es el archivo de imagen: cada VM guarda «su disco» como un fichero grande dentro del disco real del servidor. Esa imagen crece y decrece según usa espacio la máquina, y sobre ella se pueden hacer copias de seguridad o snapshots (instantáneas), que congelan el estado de la VM en un momento dado. Un snapshot permite volver atrás en segundos si algo sale mal, algo imprescindible en entornos de producción.

La red se virtualiza igual: el hipervisor crea adaptadores de red virtuales y switches virtuales (puentes entre VM y la red física). Dos VM de un mismo servidor pueden comunicarse entre sí sin que el tráfico salga siquiera del equipo, algo muy usado en arquitecturas de microservicios.

Para-virtualización y drivers paravirtuales

El aislamiento estricto tiene un coste: el hardware virtual que ve cada VM no existe de verdad, así que acceder a él por la vía «oficial» es lento. Para acelerarlo nació la para-virtualización: el sistema operativo invitado es consciente de que está virtualizado y usa drivers especiales que se comunican directamente con el hipervisor en lugar de pasar por el hardware virtual emulado.

Esos drivers paravirtuales (como los VirtIO de KVM o los integrados en los agentes de VMware y Hyper-V) ofrecen un rendimiento de entrada/salida cercano al nativo. Es la razón por la que hoy una VM bien configurada rinde casi igual que la máquina física: el tráfico de red y de disco se maneja de forma cooperativa entre invitado e hipervisor, no mediante una emulación lenta.

La relación con la nube y con los contenedores

La virtualización es la base de la nube. Cuando contratas una máquina en AWS, Azure o Google Cloud, lo que obtienes es una VM corriendo sobre un hipervisor compartido. La nube solo automatiza todo ese ciclo: crea, escala y destruye VM bajo demanda, repartiéndolas entre millones de servidores físicos.

Conviene distinguirla de los contenedores. Un contenedor (como Docker) no virtualiza el hardware: comparte el kernel del sistema operativo del servidor y solo aísla procesos y dependencias. Es más ligero y arranca en milisegundos, pero su aislamiento es más débil. La VM es más pesada pero aísla por completo, con su propio kernel. Las plataformas modernas combinan ambas: máquinas virtuales para aislar hardware y contenedores dentro de ellas para empaquetar aplicaciones.

El coste de la abstracción

Nada es gratis. La virtualización añade una capa de software y, con ella, una pequeña sobrecarga de rendimiento y una mayor superficie de ataque: si el hipervisor tiene una vulnerabilidad, todas las VM que dependen de él pueden verse comprometidas (los llamados escape de VM, ataques donde el malware sale de su máquina virtual para alcanzar al hipervisor). Además, mantener decenas de sistemas operativos invitados implica más parches, más licencias y más complejidad operativa.

Aun así, el balance es aplastantemente positivo. Sin virtualización no habría centros de datos con decenas de miles de servidores funcionando al máximo, ni la elasticidad que permite que una web crezca de mil a un millón de usuarios en una tarde. Es, literalmente, la capa invisible que sostiene a casi todo internet.