Infraestrutura TI

Comparativo: Servidor dedicado vs Vm vs Container vs K8s

Pensando em subir uma nova aplicação, mas não sabe onde? Neste artigo, queremos mostrar as principais características de cada plataforma (Servidor Dedicado, Máquina Virtual, Docker e Kubernetes), seus prós e contras, para que você consiga escolher a plataforma mais compatível para você hospedar seu site ou app.

Servidor Dedicado

Quando falamos de um servidor dedicado ou bare metal, estamos falando de um servidor exclusivamente para nos atender. Em outras palavras, CPU, disco e memória RAM são todos seus, ou melhor, da sua aplicação. Em nível arquitetural, temos as seguintes camadas: Hardware -> Sistema Operacional -> Bibliotecas -> Nossas Apps.

Características:

  • Não compartilha recursos de hardware com outras aplicações
  • Alto custo
  • Pouca flexibilidade
  • Indivisibilidade

Quando falamos que ele é pouco flexível, imaginamos um cenário em que sua App recebe 100 visitas durante todos os dias do mês e, em apenas uma semana específica, recebe 100 vezes mais visitas. Em um cenário com apenas um servidor dedicado, precisamos ter um hardware disponível o tempo todo para atender à nossa necessidade máxima. Ou seja, esse ambiente é bom quando temos previsibilidade de recursos por um bom tempo. Já a indivisibilidade se refere a um cenário em que, se você precisar subir uma segunda aplicação que, por diversos motivos, é incompatível com a primeira, em um servidor dedicado, você precisaria de um segundo servidor.

Máquina Virtual

VM (Máquina Virtual) ou VPS (Virtual Private Server) já começa a ser um pouco mais flexível. Em vez de um servidor dedicado, você tem apenas parte de um, ou seja, a CPU pode acabar sendo compartilhada. Isso nos traz alguns benefícios. Em nível de arquitetura, temos as seguintes camadas: Hardware -> Virtualizador -> Sistema Operacional -> Bibliotecas -> Nossa App. É similar a um servidor dedicado, mas a diferença é que, a partir de cada sistema operacional, temos uma máquina virtual isolada das outras. Fazer um upgrade de CPU ou memória RAM é bem mais simples. Em vez de dois servidores, podemos ter agora duas VMs, uma para cada app que é incompatível com a outra.

Características:

  • Flexibilidade em fazer upgrade/downgrade
  • Custo reduzido
  • Compartilha recursos com outras VMs
  • Carrega um sistema operacional completo por VM

Quando falamos que cada VM tem um sistema operacional completo, isso acaba sendo um ponto negativo. Em um cenário onde cada OS representa 5% dos recursos da sua VM, ao ter 5 VMs, 25% do processamento total será gasto apenas para manter o OS de cada VM, que muitas vezes é igual.

Containers

Ao contrário de uma VM, quando falamos de Containers, temos as seguintes camadas: Hardware -> Sistema Operacional -> Container Engine -> Container. Ou seja, agora temos apenas um sistema operacional, e o container engine lida muito bem com essa situação. Cada container compartilha o kernel do sistema operacional, ficando bem pequeno, tendo dentro de cada container somente o necessário para funcionar, ou seja, libs e apps.

Características

  • Flexibilidade
  • Custo reduzido
  • Isolamento de processamento

Quando falamos de flexibilidade, uma vez que ele carrega apenas o necessário para funcionar, torna-se versátil o suficiente para rodar com o mesmo resultado em máquinas locais, datacenters e até provedores de nuvem. Seu tamanho reduzido também reflete no custo, já que não há mais o custo de carregar um sistema operacional completo, resultando em custos bem reduzidos. Já no isolamento, um container usa o sistema operacional do host (kernel). Você, do lado de fora, consegue ver o interior de cada um dos containers, mas normalmente cada container não consegue ver o processo do host nem de outros containers. Pense no container como um processo de aplicativo isolado em execução, não como uma máquina virtual.

Kubernetes

Voltando a falar de containers, uma vez que queremos, por exemplo, subir um banco de dados em container, podemos usar o Podman ou Docker, que são gerenciadores de containers. Com eles, conseguimos gerenciar de forma simples alguns containers. Porém, quando colocamos isso em escala, ou seja, produção, gerir milhares de containers, escalar para suportar a carga de trabalho, etc., precisamos dar um passo além, e é nesse sentido que entra o Kubernetes. O Kubernetes é um orquestrador de containers para larga escala. Não que você não consiga gerenciar poucos, mas é comumente oferecido pelos principais provedores de nuvem, como AWS, Azure, OCI, GCP, Vultr, entre outros.

Características:

  • Flexibilidade
  • Isolamento de processamento

A ideia central do Kubernetes é permitir que você tenha facilidade em gerenciar vários servidores a fim de criar um cluster onde o K8s será responsável por controlar a integridade, saúde, escalar e até matar o container se necessário. Nossa ideia aqui não é mostrar a arquitetura de um K8s; em breve devemos fazer algo assim. Tenha em mente que ele é para projetos que precisam escalar com velocidade, uma vez que você pode adicionar e remover nodes de forma fácil por provedores de nuvem.

Conclusão

Temos então três formas de hospedar nossa App: em um servidor dedicado, VM ou com container. Como saber qual o melhor para o meu cenário? Para isso, devemos responder algumas perguntas: Minha App precisa de recursos físicos? Por exemplo, um pendrive para validar alguma coisa? Se sim, servidor dedicado. Sua App tem poucos acessos? Se tiver poucos acessos e não tiver previsibilidade de crescimento da noite para o dia, um servidor virtual ou até compartilhado é uma boa pedida.

Agora, se sua App tem muita volatilidade ou se você tem muitos aplicativos que podem ter quantidades bem variadas de visitas por dia, uma cloud com K8s é uma boa opção. Um disclaimer da conclusão é que, em todo o artigo, usei visitas como fator de decisão, mas para sua realidade pode ser outro fator, como processamento de arquivos, e assim por diante. A ideia central do nosso artigo segue essa lógica também.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.