VM vs Containers

VM vs Containers para Microservicios
En esta era de software de evolución constante, escuchamos mucho sobre el uso de contenedores para microservicios y la necesidad de modernizar las aplicaciones monolíticas. Pero, siempre hay una pregunta inminente para una empresa que surge a continuación y rara vez se aborda: ¿por qué no usar máquinas virtuales en lugar de contenedores? Las máquinas virtuales ofrecen la virtualización del hardware y del sistema operativo y crean un duplicado eficiente y aislado de una máquina real. En el caso de los contenedores, solo el sistema operativo se virtualiza y no el hardware, creando un entorno liviano que alberga la aplicación y los activos dependientes. Los contenedores han seguido ganando popularidad desde 2014 y las máquinas virtuales han existido durante mucho tiempo, la diferencia entre los dos es conocida por todos. A medida que el mundo sigue comparando los dos, es imperativo recordar que ambos están aquí para servir a diferentes propósitos. Pero cuando los microservicios entran en escena, la pregunta: «¿contenerizar o virtualizar?» Parece ser frecuente.
Fuente: dzone.com
Beneficios del uso de contenedores sobre máquinas virtuales para microservicios

Costo rebajado

Las máquinas virtuales facilitan la partición de entornos de ejecución entre microservicios al virtualizar hardware y sistemas operativos. Cuando ejecuta cada microservicio a través de una VM separada, eso también requiere la replicación del sistema operativo. Esto aumentará los costos de licencia. Es posible ejecutar múltiples microservicios en una sola VM, pero eso negaría la mayor ventaja de dividir una aplicación monolítica en pequeños microservicios fácilmente ejecutables. El problema de las bibliotecas en conflicto y los componentes de la aplicación permanecerá sin resolver.

Los contenedores ofrecen aislamiento a nivel del sistema operativo. Por lo tanto, un solo sistema operativo puede admitir múltiples contenedores, cada uno de los cuales se ejecuta dentro de su propio entorno de ejecución separado. Al ejecutar múltiples componentes en un solo sistema operativo, reduce los costos generales de licencia.

Mayor eficiencia

Es de conocimiento común que las máquinas virtuales a menudo imponen una gran penalización de rendimiento al usar ciclos de procesamiento del servidor que se pueden usar para ejecutar aplicaciones. Cada máquina virtual ejecuta su propio entorno de ejecución en una copia separada del sistema operativo que agota los ciclos de procesamiento del servidor que de otro modo podría haber utilizado para ejecutar las aplicaciones.

Por otro lado, los contenedores realizan el aislamiento del entorno a nivel del sistema operativo. De esta forma, un único sistema operativo puede admitir múltiples contenedores, cada uno de los cuales se ejecuta dentro de su propio entorno aislado y separado. Al ejecutar múltiples componentes en un solo sistema operativo, los contenedores reducen los ciclos de procesamiento del servidor superior, liberando así la potencia de procesamiento para otros componentes de la aplicación.

Almacenamiento flexible

Las máquinas virtuales tienen múltiples opciones de almacenamiento. Pueden tener un tipo de almacenamiento local o de red. Cualquiera sea la opción que elija, siempre habrá un espacio físico en el disco asignado a cada VM que esté aislado de la VM. Entonces, en todo momento, el sistema operativo, los archivos de programa y los datos de una VM ocupan espacio de almacenamiento en el disco de almacenamiento dedicado: almacenamiento con estado.

En contraste, los Contenedores ofrecen la opción de ser con estado o sin estado. El espacio de almacenamiento se crea u ocupa cuando el contenedor se crea y se descarta junto con su eliminación. Se crea una capa de sandbox cuando se edita una imagen de contenedor y almacena todos los datos. Esta capa está activa solo como parte del contenedor. Por lo tanto, cada servicio de su aplicación de microservicios puede tener su propio almacenamiento, que se puede administrar de manera diferente al almacenamiento de otros servicios, lo que proporciona más flexibilidad y control.

Mejor aislamiento

Como se mencionó anteriormente, los contenedores ofrecen entornos de ejecución independientes para microservicios al tiempo que permiten la cohabitación en un solo sistema operativo. Las bases de datos, así como los entornos de microservicios, son completamente independientes, a pesar de estar implementados en un único sistema operativo. Si se intenta ejecutar múltiples microservicios en una sola VM, puede haber entornos superpuestos que pueden terminar obstruyendo el servidor.

Con los contenedores, se puede aprovechar al máximo una determinada pieza de hardware mediante el procesamiento inteligente de aplicaciones. Por ejemplo, algunos microservicios requieren mucha potencia de procesamiento, mientras que otros pueden generar mucho tráfico de red. Con la asignación inteligente de la carga de trabajo dentro de los contenedores, los desarrolladores de aplicaciones pueden utilizar eficientemente los recursos del servidor, asegurando que la capacidad de la red no se deje sin usar.

Tamaño reducido

Las máquinas virtuales, como sabemos, ocupan mucho más espacio de almacenamiento que los contenedores. Un contenedor suele ser tan pequeño como 10 MB, mientras que una máquina virtual ocupa al menos unos pocos GB de espacio de almacenamiento. Al segregar una aplicación compleja utilizando la arquitectura de microservicios, donde cada funcionalidad es un microservicio separado, el aislamiento requerirá una gran cantidad de máquinas virtuales o contenedores. Las máquinas virtuales requieren mucho espacio, mientras que los contenedores no lo harán. El mismo servidor físico puede contener muchos más contenedores que las máquinas virtuales. Por lo tanto, dada la necesidad de garantizar que la aplicación empresarial no se vuelva demasiado voluminosa, la contenedorización suele ser la opción preferida.

Ejecución más rápida

Las máquinas virtuales son creadas por un hipervisor que necesita muchas decisiones de configuración al inicio: el sistema operativo invitado para ejecutar la aplicación, la cantidad de espacio de almacenamiento necesario, las preferencias de red y muchas configuraciones similares. Por otro lado, los contenedores se crean más rápido que las máquinas virtuales debido a la ausencia de un hipervisor. Las imágenes de los contenedores se almacenan en un repositorio desde donde se pueden extraer según sea necesario a través de algunos comandos rápidos. Por lo tanto, el tiempo de inicio para los contenedores Docker varía de unos pocos milisegundos a un par de segundos, lo que lo hace mucho más rápido que una VM.

La ejecución de microservicios en contenedores a escala puede simplificarse aún más utilizando orquestadores de contenedores como Kubernetes y Docker Swarm. Los contenedores Docker se pueden iniciar, retirar y reemplazar rápidamente a escala con dichos orquestadores. Para mejorar aún más el trabajo con microservicios y contenedores, uno puede usar plataformas de entrega de aplicaciones diseñadas exclusivamente para superar los desafíos de entrega modernos para una empresa. Una plataforma de entrega de aplicaciones puede ayudar a acelerar, estandarizar y mantener el proceso completo de contenedorización y entrega posterior a los orquestadores.

En realidad, cada empresa viene con sus propias necesidades, requisitos y sistemas heredados.En la elección entre máquinas virtuales y contenedores, este último es más adecuado para empaquetar microservicios.Entonces, si uno está buscando una arquitectura moderna escalable y flexible para sus equipos, los contenedores son su mejor opción para garantizar la entrega continua.

ajimenez1965@gmail.com