Container vs. máquina virtual


A virtualização transformou fundamentalmente o modo como as TI operam. A virtualização rompeu o tradicional (dispendioso e ineficiente) rácio de um para um entre hardware e sistemas operativos, ao permitir a existência de múltiplos ambientes informáticos simulados numa única máquina física.

container_virtual-machine.jpg

Num primeiro tempo, a virtualização revolucionou as TI através das máquinas virtuais (MV). Cada MV comporta-se como um computador totalmente independente, capaz de executar o seu sistema operativo e código de aplicação. Isto permite que os departamentos informáticos consolidem muitos servidores físicos subutilizados num número muito menor de máquinas mais potentes, reduzindo significativamente a dispersão de hardware e os custos energéticos.

Os containers vieram fazer evoluir o conceito de virtualização. Oferecendo uma virtualização mais leve, os containers compartilham o sistema operativo da máquina host, mas isolam aplicações específicas e as suas dependências.

Assim, os containers são incrivelmente rápidos de iniciar e fáceis de mover, o que os torna ideais para utilização baseada na cloud. De um modo geral, a virtualização permite às equipas informáticas otimizar a utilização dos recursos e o desenvolvimento, melhorar a flexibilidade para a recuperação de desastres e, em última análise, reduzir os custos e aumentar a agilidade.

Compreender a virtualização

A virtualização revolucionou a eficiência informática através da introdução de uma camada de software entre o hardware e os sistemas operativos que nele funcionam. Esta camada é conhecida como hipervisor, e é a chave para criar máquinas virtuais ou um container.

O hipervisor é um gestor de recursos que atribui a cada ambiente virtual partes da CPU, da memória, do armazenamento e do sistema de rede do hardware. Também interceta instruções dos sistemas operativos executados dentro das MV e converte-as em comandos que o hardware físico pode entender.

Os processadores modernos geralmente incluem recursos de virtualização assistidos por hardware (por exemplo, Intel VT-x ou AMD-V). Estas funcionalidades permitem ao hipervisor transferir tarefas específicas diretamente para o hardware, o que resulta numa melhoria significativa do desempenho das MV. Embora seja vantajosa, a virtualização assistida por hardware não é estritamente necessária; a virtualização baseada em software pode ainda funcionar com eficiência.

Em última análise, a virtualização cria uma camada de abstração que torna o software independente do hardware subjacente. Esta é a base do seu impacto transformador na agilidade e eficiência das TI.

O que é uma máquina virtual?

Uma máquina virtual (MV) permite a virtualização. Trata-se de uma emulação de software de um sistema informático físico, dotado de CPU virtual, memória, armazenamento e interfaces de rede.  É como um computador simulado a funcionar dentro de outro computador.
 

As máquinas virtuais podem ser criadas e geridas através de um hipervisor, que funciona como um condutor, atribuindo recursos e assegurando o funcionamento fluido de várias máquinas numa única máquina física. As MV oferecem uma ferramenta versátil em diferentes ambientes informáticos:

  • Computadores pessoais (PC):  Os particulares podem utilizar uma máquina virtual num computador pessoal para executar software concebido para um sistema operativo diferente. Por exemplo, pode-se criar uma MV com Windows no seu Mac para executar programas específicos para Windows.
     
  • Servidores locais:  As empresas podem recorrer às MV para consolidar vários servidores físicos num número reduzido de máquinas mais potentes. Isto reduz os custos de hardware e simplifica a gestão de servidores. Os departamentos informáticos podem criar MV para tarefas específicas, como servidores web, bases de dados ou ambientes de desenvolvimento.
     
  • Cloud computing: Os fornecedores cloud disponibilizam máquinas-virtuais-como-serviço (IaaS), que oferecem uma escalabilidade e uma flexibilidade excelentes. As empresas podem facilmente provisionar máquinas com os recursos desejados, a pedido, eliminando a necessidade de investimento inicial em hardware. Também podem aumentar ou diminuir as suas MV em função da evolução das cargas de trabalho.


No fundo, as MV fornecem ambientes de computação isolados que se comportam como computadores independentes.

Este isolamento permite-lhes executar diferentes SO e aplicações na mesma máquina física, independentemente da localização (no seu PC, no servidor de uma empresa ou na cloud). Tal flexibilidade e eficiência fazem da virtualização uma tecnologia fundamental na paisagem informática atual.

O que é um container?

Enquanto as máquinas virtuais são excelentes na emulação de computadores inteiros, os containers oferecem uma alternativa mais leve e rápida. Ao contrário das máquinas totalmente virtualizadas, os containers não simulam o seu hardware. Em vez disso, compartilham o kernel do sistema operativo da máquina host, mas isolam a aplicação específica, as suas bibliotecas e as dependências necessárias à execução. Normalmente, os containers são orquestrados pelo Kubernetes ou pelo Docker.
 

Assim, o arranque de um container é muito mais rápido e as aplicações utilizam menos recursos do que as MV. O uso de containers é ideal para várias aplicações, nomeadamente:

Arquitetura de microsserviços:

As aplicações modernas são frequentemente construídas como coleções de serviços pequenos e independentes. Estes microsserviços são perfeitamente empacotados pelos containers, o que permite um desenvolvimento, uma implementação e uma escalabilidade independentes.

Desenvolvimento cloud-nativo:

Os containers também se destacam em ambientes cloud. A sua portabilidade e os seus rápidos tempos de arranque tornam-nos ideais para a implementação e gestão de aplicações em plataformas cloud.

Integração e entrega contínuas (CI/CD)

Os containers simplificam os pipelines de CI/CD. Os programadores podem criar ambientes coerentes para testes e implementação, independentemente da infraestrutura subjacente.

Padronização e isolamento:

Os containers asseguram que as aplicações são executadas de forma consistente em diferentes ambientes ao agrupar todas as suas dependências. Este isolamento também evita conflitos entre aplicações que partilham a mesma máquina host.

High-Performance Computing:

Os containers podem, de forma eficiente, gerir e escalar cargas de trabalho paralelas em High-Performance Computing.

Os containers são leves e eficientes. Mas o uso e a gestão de muitos deles, especialmente em escala, podem tornar-se complexos. As soluções de orquestração, como o Docker, automatizam a implementação, o dimensionamento e a ligação em rede em vários containers. 

Em suma, a orquestração ajuda a gerir muitos containers e a manter os programas a funcionarem sem problemas. O Kubernetes é um exemplo de orquestração de containers, e o Managed Kubernetes e o Managed Rancher são comummente adotados pelas empresas para gerir áreas tecnológicas complexas que dependem de containers.

De um modo geral, os containers oferecem uma abordagem à virtualização mais rápida e flexível do que as MV. A sua natureza leve e o seu foco em códigos isolados tornam-nos perfeitos para fluxos de trabalho modernos de desenvolvimento e implementação, especialmente em ambientes baseados na cloud.

Semelhanças e diferenças

As máquinas virtuais e os containers são ferramentas de virtualização potentes, mas a sua abordagem e resultados diferem. As MV emulam um sistema informático, incluindo CPU virtual, memória, armazenamento e interfaces de rede.

Cada MV executa um sistema operativo completo. Este facto oferece um alto grau de isolamento e torna as MV ideais para cenários em que é preciso executar vários sistemas operativos no mesmo hardware, suportar aplicações antigas ligadas a versões específicas de SO ou impor limites de segurança rigorosos. No entanto, toda esta emulação do sistema é mais onerosa; as MV são mais proeminentes, têm um arranque mais lento e usam mais recursos.

Os containers, por outro lado, apresentam uma abordagem mais leve. Compartilham o kernel do sistema operativo da máquina host, mas empacotam a aplicação específica junto com as suas bibliotecas e dependências necessárias. Isto faz com que um container seja incrivelmente rápido de iniciar (frequentemente em segundos) e altamente portátil.

O seu tamanho mais pequeno também permite uma maior eficiência: pode-se usar muito mais containers num único host do que as MV. Os containers são adequados para cargas de trabalho cloud-nativas, arquiteturas de microsserviços e qualquer situação em que a velocidade, a portabilidade e a eficiência de recursos sejam cruciais. Ao mesmo tempo, os containers oferecem um bom isolamento, mas não são tão fortes como as MV, devido ao sistema operativo de kernel partilhado.

Qual é a melhor opção?

As máquinas virtuais oferecem qualidades de isolamento robustas, mas consomem muitos recursos. Contudo, uma vez que cada MV executa um sistema operativo completo e separado, as MV oferecem um isolamento mais substancial. Isto protege o código contra conflitos e garante a segurança para cargas de trabalho altamente sensíveis ou com requisitos de conformidade rigorosos. Por outro lado, os containers podem aumentar ainda mais a eficiência ao oferecer uma versão leve.
 

Prós e contras das máquinas virtuais

As máquinas virtuais são uma tecnologia bem consolidada com uma vasta gama de ferramentas de gestão, opções de suporte e um histórico de desempenho fiável, o que facilita a sua adoção nos ambientes informáticos tradicionais.

A simulação de todo um sistema informático dentro de cada MV consome uma quantidade considerável de recursos em termos de CPU, memória e armazenamento. Este facto pode limitar o número de máquinas passíveis de funcionar numa máquina física, aumentando os custos.

Inicializar um sistema operativo totalmente virtualizado adiciona uma sobrecarga significativa em comparação com os containers. Isto torna as MV menos adaptadas a situações que exijam uma implementação e um redimensionamento rápidos dos serviços.

Em comparação, os containers compartilham o kernel do sistema operativo da máquina host, o que os torna extremamente rápidos de iniciar (na verdade, bastam alguns segundos) e significativamente menores do que as máquinas virtuais. Esta redução de despesa traduz-se num menor custo dos recursos e numa maior eficiência.

Comparação com os containers

Empacotados com todas as dependências necessárias, os containers são altamente portáteis. Isto permite que funcionem de forma consistente em sistemas diferentes, simplificando o desenvolvimento, o teste e a implementação na cloud.

A natureza leve dos containers possibilita uma rápida escalabilidade das aplicações. Aprovisionar ou remover containers é muito mais rápido do que com uma máquina virtual, isto é, eles são ideais para lidar com cargas de trabalho variáveis.

Por outro lado, compartilhar o kernel do sistema operativo do host significa que os containers oferecem menos isolamento do que uma MV. Embora existam medidas de segurança, estas revelam-se menos adaptadas a cargas de trabalho multilocatários extremamente sensíveis, com limites de conformidade rigorosos.

Os containers costumam depender do SO host subjacente, o que restringe os tipos de sistemas operativos que podem ser executados internamente. Ou seja, são menos flexíveis do que as MV para aplicações antigas específicas.

A tecnologia dos containers é mais recente do que a tecnologia das MV e continua a evoluir rapidamente. As ferramentas e as boas práticas de orquestração também continuam a amadurecer, e a gestão de containers pode oferecer uma maior complexidade do que a gestão tradicional de MV.

Análise das aplicações para uma melhor adequação

Estas exigências de cálculo são as melhores para as máquinas virtuais:

Consolidação de aplicações antigas:

Muitas aplicações mais antigas foram construídas com suposições sobre uma versão de sistema operativo ou recursos de hardware específicos. As MV criam ambientes isolados onde estas dependências são cumpridas, permitindo executar aplicações antigas em hardware moderno e prolongar-lhes o tempo de vida.

Ambientes multilocatários:

Ao servir vários clientes, cada um com os seus próprios requisitos em matéria de dados e aplicações, a grande proteção oferecida pelas máquinas virtuais é fundamental. As MV oferecem a cada cliente «jardins murados» independentes, garantindo que dados e processos permanecem separados, aumentando a segurança e cumprindo as normas de conformidade.

Testes e desenvolvimento:

Isto permite que os programadores criem rapidamente ambientes de teste a imitar diferentes sistemas operativos, configurações de rede ou versões de software. Assim, simplificam-se as experiências com alterações de código, isolando os testes dos sistemas de produção e garantindo que o software funciona de forma fiável em várias plataformas-alvo.

Recuperação de desastres:

A capacidade de replicar toda uma MV com as suas aplicações e dados é acompanhada de uma ferramenta de recuperação de desastres robusta. As MV em standby podem ser ativadas em diferentes localizações geográficas ou de hardware, minimizando o downtime e garantindo a continuidade da atividade em caso de falha elétrica.

Em contrapartida, os containers são mais adequados para:

Arquiteturas de microsserviços:

Os programas modernos adotam frequentemente pequenos componentes (microsserviços), cada um dos quais com uma tarefa específica. Os containers encapsulam perfeitamente estes microsserviços com as suas dependências necessárias, promovendo a escalabilidade e as atualizações. Isto está em conformidade com as práticas de software ágil.

Icons/concept/Cloud/Cloud Infinity Created with Sketch.

Pipelines CI/CD:

Os containers garantem consistência, desde a configuração, passando pelo teste, até à implementação. O código é empacotado num container uma vez; depois passa por várias fases do pipeline com todas as suas dependências intactas, eliminando conflitos de configuração que costumam surgir aquando da implementação em máquinas diferentes.

Icons/concept/Cloud/Cloud Hand Created with Sketch.

Aplicações cloud-nativas:

Concebidos tendo em conta a portabilidade, os containers circulam facilmente pelas plataformas cloud. Permitem uma escalabilidade rápida, iniciando e parando rapidamente, o que permite que as aplicações se adaptem automaticamente às mudanças de necessidades de carga. Esta eficiência de recursos é essencial para maximizar os benefícios do cloud computing.

Implementações de alta densidade:

A natureza leve dos containers significa que um único servidor físico pode suportar muito mais aplicações do que uma configuração de MV. Por isso, os containers revelam-se ideais quando a maximização da utilização do hardware é uma prioridade, permitindo retirar mais valor da infraestrutura existente.

Produtos da OVHcloud

Rancher overview

Gestão simplificada e centralizada dos seus clusters Kubernetes

Simplifique a implementação, a gestão e o melhoramento contínuo das suas aplicações conteinerizadas num ambiente Kubernetes. Este serviço simplifica a gestão multiclusters no Kubernetes, em particular ao utilizar ambientes multicloud ou híbridos.
Além de poupar tempo e dinheiro, a sua equipa pode concentrar-se no desenvolvimento de aplicações conteinerizadas.

Orchestration

Serviço Managed Kubernetes® gratuito para orquestrar os seus containers

O Kubernetes® é uma das ferramentas de orquestração de containers mais amplamente utilizadas no mercado. Recorrem a ele empresas de todas as dimensões. Pode ser usado para implementar aplicações, escalá-las e torná-las mais resilientes, mesmo em infraestruturas híbridas ou multicloud.

O serviço Managed Kubernetes® é suportado pelas instâncias Public Cloud da OVHcloud. Graças aos Load Balancers e aos discos adicionais OVHcloud integrados, poderá alojar todo o tipo de carga de trabalho com total reversibilidade.