Comparativo entre VM e container

Virtual Machine (VM)

Caso 1 (1 aplicação = 1 servidor)

  • Problemas

    • Custo elevado na manutenção e recursos da máquina

    • Escalonamento vertical

      Escalonamento vertical é a ação de aumentar os recursos utilizados, como por exemplo CPU e memória.

    • Downtime elevado

Caso 2 (OS compartilhado)

  • Vantagens em relação ao “caso 1”

    • Redução no custo
  • Problemas

    • Falta de isolamento de dependências e serviços após alguma atualização de uma das aplicações

    • Dificuldade nas trocas de versões da aplicação

    • Downtime elevado

Caso 3 (Virtual Server)

  • Vantagens

    • Maior isolamento entre aplicações (OS / binários para cada aplicação)

    • A partir do Hypervisor é possível salvar snapshots da imagem da VM (facilidade na persistência e gerenciamento de backups)

    • Redução no downtime entre atualizações

Container

Características

  • Substituição do Hypervisor por um Container Engine (Exemplo: Docker Engine)

A virtualização com um Container Engine é em nível de sistema operacional.

  • Imutabilidade das imagens (em caso de alteração na imagem, é necessário recriá-la)

Vantagens

  • Simplificação na gestão (1 único sistema operacional e os container runtime o simula)

  • Economia de recurso

  • Controle de memória e CPU para cada container

  • Troca das versões facilidade e sem downtime entre as as atualizações

  • Viabilizam implantações bem sucedidas

    • Imagens de containers garantem eficiência na entrega da aplicação

    • Inibem dependências ausentes ou incorretas

    • Evitam conflitos entre programas/bibliotecas

  • Descrevem a aplicação a ser implantada

OBS

Os containers proporciona uma séria de benefícios, porém ainda possuem pontos de melhoria e que outras ferramentas, como o Kubernetes, fazem de forma mais eficiente. Como por exemplo:

  • Para DevOps

    • Implantações bem sucedidas

    • Alta disponibilidade

    • Escalabilidade

    • Segurança

  • Para Devs

    • Interface agradável (apenas CLI)