La virtualización es uno de los temas más complejos que hoy podemos encontrar en el diseño de plataformas de datos y aplicaciones, cubre prácticamente todas las posibilidades y requerimientos necesarios para crear un centro de datos, sea un gran DataCenter con miles de servidores, un SDC con decenas, o un solo servidor instalado en las oficinas de una empresa.
Es la base del servicio de alta disponibilidad y maneja, de una u otra forma, todos los componentes que forman parte de cada uno de los servidores principales o nodos y la interoperabilidad de los componentes de los mismos, maneja la memoria, la CPU, las comunicaciones y los accesos a los discos de cada uno de los nodos, esto significa añadir una o varias capas “de control y administración” a cada uno de los componentes que controla y cuando hablamos de alta disponibilidad, también hay que tener en cuenta que una capa adicional en el software significa una nueva fuente de posibles problemas.
Hay varios tipos de virtualización, pero se pueden agrupar globalmente en dos grandes grupos, la virtualización del hardware y la virtualización de Sistema Operativo.
Virtualización del hardware
Tienen la ventaja de que como emula dentro de cada VPS el hardware nativo de la máquina, permite mezclar cualquier tipo de S.O., en sus VPS pueden convivir, Windos, Linux, etc…, el hardware del servidor virtualizado es visto dentro de cada VPS como una máquina física, cada Sistema Operativo lo usa independientemente e instala sus propios driver de manejo de hardware, indudablemente esto es la teoría, la práctica es más compleja.
Los que llevamos tiempo usando hardware especializado, hemos aprendido por experiencia propia, que el manejo de los controladores siempre ha sido uno de los puntos mas delicados y una de las principales fuentes de problemas de estabilidad en los servidores.
Por ejemplo hace tan solo unos meses, hemos tenido serios problemas para configurar una máquina de ultima generación, con un RAID de última generación de la misma marca, al final para la solución fue necesario que el fabricante hiciera un parche para los controladores (drivers), lo que quiero decir con esto, es que esos problemas siguen y seguirán existiendo mientras haya nuevas máquinas y nuevos periféricos.
Si a los problemas originados por el mismo driver (software) del dispositivo se le añade un par de capas de virtualización, en el manejo de I/O , la lógica indica que con ello, se están multiplicando las posibilidades de tener problemas, si además, le añadimos dos sistemas operativos diferentes, que utilizarán diferentes drivers para el mismo hardware utilizado y que hacen un manejo del I/O totalmente diferente, la posibilidad de tener problemas se vuelve a multiplicar, si hay Windows y Linux instalados en el mismo nodo, los errores pueden aparecer en Linux, en Windows o en ambos…
Si en un nodo con virtualización de hardware, solo se instala un tipo de sistema operativo para todos los VPS, la probabilidad de problemas quedara reducida a que el software puede fallar para ese sistema, por lo que las posibilidades de error se reducen a 2/3 de las que tienen el mezclar sistemas operativos.
Virtualización de sistema operativo o de recursos
En la virtualización de Sistema Operativo, como por ejemplo Virtuozzo u OpenVZ, hay una sola capa, encima del sistema operativo estándar, que procesa todos los recursos del servidor, incluyendo la parte más delicada, el manejo de I/O, por tanto hay una sola posibilidad de fallo de controlador, las VPS se comunican directamente con la capa de virtualización y si en esta funcionan los drivers correctamente, las de nivel superior no fallarán.
El entorno del sistema operativo “guest” comparte el mismo sistema operativo que el del sistema “host” (el mismo kernel del sistema operativo es usado para implementar el entorno del “guest”). Las aplicaciones que corren en un entorno “guest” dado lo ven como un sistema autónomo
En un nodo con virtualización de Sistema Operativo, sólo se instala un tipo de sistema operativo para el servidor y para todos los VPS (Aunque pueden ser diferentes versiones) y como todo es manejado con una sola capa de virtualización, la probabilidad de problemas se reduce a esa sola capa.
Además la virtualización de Sistema Operativo aprovecha mejor la capacidad del servidor, al tener menos capas, tiene que ejecutar menos instrucciones en cada operación, por lo que necesita menos recursos para uso propio y es más rápida.
En virtualización de hardware el proceso teórico es:
Aplicación → S.O. → Driver de hardware → Hipervisor→ Virtualización de hardware → Driver Hardware→ Hardware.
En virtualización de sistema operativo:
Aplicación → S.O. Virtualizado con controlador de recursos en la misma capa→ Driver de hardware -→Hardware
La diferencia es de siete niveles de proceso para la virtualización de hardware, contra sólo cuatro en la virtualización de Sistema Operativo, en principio esto puede parecer que es poco importante gracias a la potencia de las máquinas actuales, pero por ejemplo, cada escritura en disco, tendrá que ejecutar tres niveles de proceso más, indudablemente cada proceso tienen una duración de microsegundos, pero al multiplicar estos microsegundos por los millones de operaciones de escritura que se realizan, la diferencia de rendimiento puede ser considerable.
Que elegir virtualizar Hardware o Sistema Operativo?
Mi elección, para una plataforma de alta disponibilidad es, sin dudarlo, la virtualización de Sistema Operativo y recursos, el motivo es simple, el eliminar capas de software y pasos de proceso, supone eliminar fuentes de problemas y obtener mejor rendimiento de la máquina.
Indudablemente decidir cual de los dos tipos de virtualización es mejor, es una decisión totalmente personal de cada diseñador de plataformas de datos y aplicaciones, dependerá de sus conocimientos, de su experiencia en ambios tipos de plataforma de virtualización y por supuesto de los recursos de los que disponga…