Qual a Diferença: VMs vs. Containers

Tanto as máquinas virtuais (VMs) como os containers desempenham um papel crucial na otimização de recursos de hardware e software por meio da virtualização.

Embora os containers existam há algum tempo, a sua ampla adoção nos últimos anos alterou fundamentalmente as práticas de TI. Por outro lado, as VMs mantiveram uma popularidade duradoura, conservando a sua presença em data centers de diversas dimensões.

Ao considerar estratégias para executar serviços e construir aplicações na nuvem, estas técnicas de virtualização emergem como ferramentas essenciais para promover agilidade e eficiência. Hoje, exploraremos o funcionamento destas tecnologias, as suas diferenças e como podem impulsionar a transformação digital das organizações.

Instalar Docker e Portainer – HomeServer.pt – Informática e Tecnologia
homeserver.pt

Primeiro, os Fundamentos: Algumas Definições

O que é Virtualização?

A virtualização é o processo de criar uma versão virtual ou representação de recursos computacionais, como servidores, dispositivos de armazenamento, sistemas operativos (SO) ou redes, que são abstraídos do hardware físico de computação. Esta abstração possibilita maior flexibilidade, escalabilidade e agilidade na gestão e implementação de recursos computacionais. Pode criar múltiplos computadores virtuais a partir dos componentes de hardware e software de uma única máquina, sendo essencialmente uma instância computacional gerada por computador.

O que é um Hipervisor?

O software que possibilita a criação e gestão de ambientes computacionais virtuais é denominado hipervisor. Este é uma camada leve de software ou firmware que se situa entre o hardware físico e os ambientes virtualizados, permitindo a execução simultânea de vários sistemas operativos numa única máquina física. O hipervisor abstrai e particiona os recursos de hardware subjacentes, como unidades de processamento central (CPU), memória, armazenamento e redes, alocando-os aos ambientes virtuais. Podemos conceber o hipervisor como o intermediário que extrai recursos das matérias-primas da infraestrutura e os direciona para as diversas instâncias computacionais.

Existem dois tipos de hipervisores:

  • Hipervisores do Tipo 1, que operam diretamente no hardware.
  • Hipervisores do Tipo 2 que funcionam dentro de um sistema operativo hospedeiro.

Os hipervisores são fundamentais para a tecnologia de virtualização, permitindo a utilização eficiente e a gestão de recursos computacionais.

VMs e Containers

O que são VMs?

As máquinas virtuais (VMs) representam os computadores gerados por virtualização – entidades virtuais independentes que operam numa única configuração de hardware ou numa pool de hardware. Cada máquina virtual atua como um ambiente isolado e autocontido, completo com os seus próprios componentes de hardware virtuais, incluindo CPU, memória, armazenamento e interfaces de rede. O hipervisor aloca e gere recursos, garantindo uma distribuição justa entre as VMs e prevenindo interferências.

Cada VM requer o seu próprio sistema operativo. Assim, cada VM pode hospedar um sistema operativo diferente, permitindo a coexistência de ambientes e aplicações de software diversos sem conflitos na mesma máquina. As VMs oferecem um nível de isolamento, assegurando que falhas ou problemas numa VM não afetem outras no mesmo hardware. Permitem, adicionalmente, ambientes de teste e desenvolvimento eficientes, pois os programadores podem criar instantâneos de VM para capturar estados específicos do sistema para experimentação ou reversões. As VMs também proporcionam a capacidade de migrar ou clonar instâncias facilmente, facilitando a escalabilidade de recursos ou a criação de cópias de segurança.

Desde o surgimento de tecnologias de virtualização acessíveis e serviços de computação em nuvem, departamentos de TI, independentemente da sua dimensão, têm adotado as VMs como uma estratégia para reduzir custos e aumentar eficiências.

No entanto, as Máquinas Virtuais (VMs) podem consumir significativos recursos do sistema. Cada VM não apenas executa uma cópia completa de um sistema operativo, mas também uma réplica virtual de todo o hardware necessário para o funcionamento desse sistema operativo. É por esta razão que as VMs são, por vezes, associadas ao termo “monolíticas” — são unidades únicas e integradas comumente utilizadas para executar aplicações construídas como ficheiros únicos e extensos. Este cenário resulta rapidamente numa utilização substancial de RAM e ciclos de CPU. Embora ainda sejam economicamente vantajosas em comparação com a execução de computadores físicos separados, para determinados casos de uso, especialmente em aplicações específicas, podem ser consideradas excessivas. Este facto levou ao desenvolvimento de contentores.

O que é uma Máquina Virtual? – HomeServer.pt – Informática e Tecnologia
homeserver.pt

Benefícios das VMs:

  • Todos os recursos do sistema operativo estão disponíveis para as aplicações.
  • Funcionalidade estabelecida.
  • Ferramentas de gestão robustas.
  • Ferramentas e controlos de segurança reconhecidos.
  • Capacidade de executar diferentes sistemas operativos numa única máquina física.
  • Poupança de custos em comparação com a execução de máquinas físicas separadas.

O que são Contentores?

Ao contrário das Máquinas Virtuais (VMs), que virtualizam um computador inteiro, os contentores virtualizam apenas o sistema operativo (SO).

Os contentores situam-se sobre um servidor físico e o respetivo sistema operativo host, geralmente Linux ou Windows. Cada contentor partilha o kernel do sistema operativo host e, normalmente, também os binários e bibliotecas, resultando numa utilização mais eficiente de recursos. (Consulte abaixo as definições se não estiver familiarizado/a com estes termos.) Os componentes partilhados são de leitura apenas.

Por que são mais eficientes? A partilha de recursos do SO, como bibliotecas, reduz significativamente a necessidade de reproduzir o código do sistema operativo — um servidor pode executar várias cargas de trabalho com uma única instalação do sistema operativo. Isso torna os contentores leves e portáteis — têm apenas alguns megabytes de tamanho e iniciam em apenas alguns segundos. O que isso significa na prática é que pode colocar duas a três vezes mais aplicações num único servidor com contentores do que com uma VM. Em comparação com contentores, as VMs demoram minutos a serem executadas e são uma ordem de grandeza maior do que um contentor equivalente, medida em gigabytes versus megabytes.

A tecnologia de contentores existe há bastante tempo, mas o lançamento do Docker em 2013 tornou os contentores praticamente um padrão da indústria para o desenvolvimento de aplicações e software. Tecnologias como Docker ou Kubernetes criam ambientes isolados para aplicações. E os contentores resolvem o problema da inconsistência do ambiente — o antigo problema “funciona no meu computador”, frequentemente encontrado no desenvolvimento e implementação de software.

Os programadores geralmente escrevem código localmente, por exemplo, no seu portátil, e depois implementam esse código num servidor. Quaisquer diferenças entre esses ambientes — versões de software, permissões, acesso a bases de dados, etc. — resultam em erros. Com contentores, os programadores podem criar uma unidade portátil e empacotada que contém todas as dependências necessárias para que essa unidade possa ser executada em qualquer ambiente, seja local, de desenvolvimento, de teste ou de produção. Esta portabilidade é uma das principais vantagens dos contentores.

Os contentores também oferecem escalabilidade, uma vez que múltiplas instâncias de uma aplicação em contentores podem ser implementadas e geridas em paralelo, permitindo uma alocação eficiente de recursos e resposta às alterações na procura.

Arquiteturas de microsserviços para o desenvolvimento de aplicações evoluíram a partir deste boom de contentores. Com contentores, as aplicações podem ser divididas nas suas partes mais pequenas ou “serviços” que servem um único propósito, e esses serviços podem ser desenvolvidos e implementados independentemente uns dos outros, em vez de numa unidade monolítica.

Por exemplo, imagine que tem uma aplicação que permite aos clientes comprar qualquer coisa no mundo. Pode ter uma barra de pesquisa, um carrinho de compras, um botão de compra, etc. Cada um desses “serviços” pode existir no seu próprio contentor, para que, por exemplo, se a barra de pesquisa falhar devido a uma carga elevada, isso não derruba todo o sistema.

Ferramentas de Contentores

Linux Containers (LXC): Comumente conhecidos como LXC, estes representam a tecnologia original de contentores para Linux. O LXC é um método de virtualização de sistema operativo para Linux que permite a execução de múltiplos sistemas Linux isolados num único host.

Docker: Originalmente concebido como uma iniciativa para desenvolver contentores LXC para aplicações individuais, o Docker revolucionou o cenário de contentores ao introduzir melhorias significativas para aprimorar a portabilidade e versatilidade. Evoluindo gradualmente para um ambiente independente de execução de contentores, o Docker tornou-se uma utilidade Linux proeminente, possibilitando a criação, transporte e execução eficientes de contentores.

Kubernetes: Embora não seja um software de contentor em essência, o Kubernetes desempenha um papel vital como orquestrador de contentores. No contexto da arquitetura nativa da nuvem e microsserviços, onde as aplicações utilizam inúmeros contentores, que podem variar de centenas a milhares ou até bilhões, o Kubernetes desempenha um papel crucial na automação abrangente da gestão desses contentores. Embora o Kubernetes dependa de ferramentas complementares como o Docker para funcionar sem problemas, é tão relevante no espaço de contentores que seria estranho não o mencionar.

Instalar Docker e Portainer – HomeServer.pt – Informática e Tecnologia
homeserver.pt

Benefícios dos Contentores:

  • Redução de recursos de gestão de TI.
  • Inicializações mais rápidas.
  • Tamanho menor significa que uma máquina física pode hospedar muitos contentores.
  • Atualizações de segurança reduzidas e simplificadas.
  • Menos código para transferir, migrar e carregar cargas de trabalho.

Diferenças entre VMs e Contentores:

O debate entre máquinas virtuais (VMs) e contentores vai ao cerne da disputa entre a arquitetura tradicional de TI e as práticas contemporâneas de DevOps.

As VMs foram e continuam a ser tremendamente populares e úteis, mas infelizmente, agora carregam o termo “monolítico” para onde quer que vão, como se fossem um Stonehenge de 25 toneladas ao pescoço. Enquanto isso, os contentores empurraram os velhos deuses de lado, adornados com o reluzente manto de “microsserviços”. Bonito.

Para oferecer outra metáfora técnica peculiar, as VMs são para contentores o que o glamping é para o backpacking ultraleve. Ambos fornecem o necessário para sobreviver nas selvas da virtualização. Ambos são portáteis, mas os contentores levam-no mais longe, mais rápido, se esse for o seu objetivo. E enquanto as VMs trazem tudo, incluindo a pia da cozinha, os contentores deixam a escova de dentes em casa para cortar peso. Para fazer uma comparação mais direta, consolidámos as diferenças numa tabela útil.

CaracterísticasMáquinas Virtuais (VMs)Contentores
PesoPesadasLeves
DesempenhoDesempenho limitadoDesempenho nativo
Execução do SOCada VM executa no seu próprio SOTodos os contentores partilham o SO do host
VirtualizaçãoVirtualização ao nível do hardwareVirtualização ao nível do SO
Tempo de ArranqueTempo de arranque em minutosTempo de arranque em milissegundos
Alocação de MemóriaAlocação de memória necessáriaRequer menos espaço de memória
Isolamento e SegurançaTotalmente isoladas e, portanto, mais segurasIsolamento ao nível do processo, possivelmente menos seguro

Esta tabela destaca as principais diferenças entre Máquinas Virtuais (VMs) e Contentores em vários aspetos, desde o peso até ao desempenho, passando pela alocação de memória e segurança.

Usos para VMs vs. Usos para Contentores:

Tanto os contentores como as VMs têm benefícios e desvantagens, e a decisão final dependerá das suas necessidades específicas.

No que diz respeito à escolha da tecnologia apropriada para as suas cargas de trabalho, as máquinas virtuais (VMs) destacam-se em situações em que as aplicações exigem acesso completo aos recursos e funcionalidades do sistema operativo. Se precisar de executar várias aplicações em servidores ou gerir uma variedade de sistemas operativos, as VMs são a melhor escolha. Se tiver uma aplicação monolítica existente que não planeia ou não precisa de reformular em microsserviços, as VMs continuarão a ser adequadas.

Os contentores são uma escolha melhor quando a sua maior prioridade é maximizar o número de aplicações ou serviços em execução num número mínimo de servidores e quando precisa de máxima portabilidade. Se estiver a desenvolver uma nova aplicação e quiser usar uma arquitetura de microsserviços para escalabilidade e portabilidade, os contentores são a escolha certa. Os contentores destacam-se no desenvolvimento de aplicações nativas da nuvem baseadas numa arquitetura de microsserviços.

Também pode executar contentores numa máquina virtual, tornando a questão menos uma escolha definitiva e mais um exercício de compreensão da tecnologia que faz mais sentido para as suas cargas de trabalho.

Resumidamente:
  • As VMs ajudam as empresas a tirar o máximo partido dos seus recursos de infraestrutura, expandindo o número de máquinas que se pode obter.
  • Os contentores ajudam as empresas a tirar o máximo partido dos recursos de desenvolvimento, possibilitando práticas de microsserviços e DevOps eficientes.

Fonte

Artigos Relacionados