O que são containers
23 Feb 2018Antes de entender o que são containers precisamos olhar como a publicação de aplicações web tem sido feita e quais os problemas eram enfrentados no deploy de aplicações e manutenção da infraestrutura. Imagina que você tem um e-commerce com os módulos: produtos, clientes, pedidos, promoções, entrega e pagamento. No final do seu deploy é gerado um pacote com todos os componentes necessários para sua aplicação rodar em produção.
O próximo passo é enviar esse pacote para o ambiente de produção usando alguma ferramenta de entrega contínua ou até mesmo usando o bom e velho FTP. Se você tem um único servidor, é bem fácil fazer esse trabalho. O número de usuários do e-commerce vai crescendo e essa máquina começa a ficar lenta pois o poder de processamento não está sendo suficiente. O primeiro passo que você pode tomar é aumentar o número de processadores e a quantidade de memória. Você faz isso e após alguns meses o número de usuários continua aumentando, sua máquina já chegou no limite de upgrade, chamamos esse upgrade de escalonamento vertical. O que fazer?
Ao invés de ter um único servidor, você precisa ter duas ou mais máquinas para aguentar o novo tráfego de requisições, isso se chama escalonamento horizontal. A solução é usar um balanceador de carga para receber as requisiçoes e enviar para os vários servidores com sua aplicação instalada. Dessa forma você consegue atender um número maior de requisições sem perda de performance e evitando prejuízos para sua empresa.
Feito isso, agora você tem sua aplicação rodando em três máquinas e está chegando a Black Friday, você sabe que essas máquinas conseguem aguentar o dobro de usuários que seu site tem normalmente. Mas a previsão para a Black Friday é que o volume de usuários aumente dez vezes! O que fazer agora? Comprar mais computadores, instalar sistema operacional, instalar sua aplicação nas novas máquinas somente por que em um dia do ano o volume vai ficar muito acima do normal? Essa não parece uma decisão muito inteligente, pois no restante do ano você terá vários computadores com poder de processamento ocioso, e isso custa dinheiro para sua empresa.
Uma das soluções inventadas para solucionar esse tipo de problema é a computação em nuvem! Dessa forma você não precisa se preocupar com máquinas físicas, você tem máquinas virtuais que podem estar rodando em qualquer computador e o processo de criação de máquinas virtuais é muito mais rápido do que o provisionamento de máquinas físicas. Poxa, legal, agora é muito mais fácil pra mim. Então por que inventaram os containers? Os containers ajudam a otimizar os recursos das máquinas e são muito mais rápidos de serem provisionados que máquinas virtuais! Veja a imagem abaixo:
Na utilização de máquinas virtuais, você tem um computador com um sistema operacional completo para hospedar várias máquinas virtuais. Cada máquina virtual tem um cópia completa do sistema operacional, sua aplicação e todas as suas dependências. Com a utilização de containers a máquina hospedeira compartilha os componentes do sistema operacional, o container contém somente sua aplicação e as dependências. E tudo continua completamente isolado como nas máquinas virtuais.
É muito barato criar e destruir containers e isso trás uma outra vantagem no momento em que a aplicação está sendo desenvolvida. Você consegue criar um ambiente idêntico ao de produção na sua máquina, isso evita aqueles problemas de erros que só acontecem em produção pois a versão do pacote X no computador do desenvolvedor é diferente da versão de produção. Isso também reduz o trabalho quando existe uma atualização do sistema operacional, pois você não está replicando cópias dele por toda a parte.
Os principais benefícios que o uso de containers nos trás são: otimização na utilização de recursos de computação, facilidade de provisionamento, redução de erros por causa de ambientes diferentes em desenvolvimento e produção.
Caso tenha dúvidas ou sugestões, utilize a caixa de comentários abaixo ou entre em contato pelo twitter em @john_owl