Desmistificando os containers

Por Boris Kuszka | 21 de Setembro de 2017 às 13h58

Muito se fala sobre containers e os benefícios que a tecnologia trouxe para os diversos processos, principalmente por conseguir encapsular microsserviços e isolá-los do processamento, memória RAM, disco e rede, propiciando desenvolvimento e infraestrutura ágeis. Mas você já parou para pensar por que os containers estão associados ao sistema operacional Linux, porque o docker é hoje o padrão de fato e qual a relação dos containers com a cultura DevOps?

O conceito de containers surgiu em 2005 com o Solaris Containers, criado pela Sun Microsystems. Na mesma época, o UNIX – considerado o pai de todos os sistemas operacionais “abertos”, no sentido de padrões abertos e não de open source, com funcionalidades como suporte a multiusuários, multitarefas, portabilidade e interface por linha de comando ou gráfica – perdia relevância para o Linux, que embora semelhante ao UNIX, diferia por ser open source e não proprietário.

Assim, em 2008, surgiu o projeto Linux Container (LXC), com o objetivo de ser uma alternativa ao chroots, responsável por mapear a árvore de diretórios que os containers vão acessar. E conforme ganhava espaço no mercado de sistemas operacionais, o Linux também foi se consolidando como o sistema por trás dos containers.

Com a expansão da internet, principalmente da cloud computing, se tornou imprescindível a adoção de uma arquitetura mais moderna de software, a partir da criação de aplicativos baseados em microsserviços, que permite escalabilidade horizontal e elasticidade, para atender altas e baixas demandas. A escalabilidade vertical, com adição de CPU e memória ao computador para aumentar a capacidade de processamento, já não era viável - nem comercialmente e nem tecnicamente.

Em outras palavras: aplicativos monolíticos, em oposição aos baseados em microsserviços, têm grandes dificuldades de escalabilidade horizontal, pois toda vez que se provisiona mais uma instância para atender demandas maiores, consome muita CPU e memória. Já em uma arquitetura moderna, baseada em microsserviços, a escalabilidade horizontal onera muito menos CPU e memória a cada estanciamento, além de ser muito mais rápida a reação a mudanças de demandas.

Os containers atuam no isolamento do microsserviço, composto por um pedaço da aplicação e todas as suas dependências, onde cada um desses pedaços está desacoplado (não tem dependências diretas) dos outros pedaços. O container cria uma abstração para o microsserviço do “Kernel Space” e, com isso, gera-se a portabilidade do container, permitindo que ele rode em uma máquina física, virtual, nuvem privada ou pública e habilite o transbordo do datacenter para outros ambientes: outro datacenter, nuvens públicas ou qualquer infraestrutura que tenha o linux compatível instalado. É a tecnologia de container que permite melhores e mais rápidas implementações; elasticidade com a replicação de mais instâncias do microsserviço que está engargalando o sistema ou retirando instâncias que estão ocupando espaço desnecessário; e possibilita a implantação de novos microsserviços, em produção sem paradas, facilitando os rollbacks.

Na prática, a escalabilidade horizontal e a elasticidade com os Linux Containers fazem com que o serviço continue estável e funcionando adequadamente mesmo se houver uma explosão de acessos, realidade que pode acontecer a qualquer momento, em se tratando de negócios baseados na internet, como é o caso de mobile banking, e-commerce e qualquer serviço por aplicativo móvel, como táxi por exemplo.

Essa era da hiperconectividade, que exige das empresas preparação para qualquer demanda, despertou o surgimento do formato de container docker, em 2013. Uma evolução da tecnologia proprietária dotCloud. Pela maneira que foi implementada e pela maturidade, essa forma de empacotamento de aplicações teve adoção maciça, chamando a atenção de empresas como a Red Hat, que ainda em 2013 anunciou uma colaboração com a empresa Docker para o Fedora, Red Hat Enterprise Linux e a substituição do padrão anterior Gear no OpenShift por docker. Um ano depois, a Microsoft anunciou a adoção de containers Windows no formato docker. Pouco depois foi a vez da IBM.

A Google foi outra empresa que começou a utilizar o formato docker e impulsionou a adoção. No entanto, por atingir grandezas de acesso e demanda que nenhuma outra companhia tinha alcançado até então, foi necessário criar um gerenciamento de containers. Foi assim que a gigante disponibilizou no mercado o Kubernetes, uma ferramenta de governança de dockers que também está se tornando um padrão de fato, tendo a primeira versão empresarial no OpenShift da Red Hat.

É assim que os containers atuam na cultura DevOps. Se por um lado, na operação, geram escalabilidade, elasticidade e gerenciamento, no desenvolvimento conseguem criar um ambiente de provisionamento mais ágil e seguro - com criptografia de todos os dados em trânsito, novas ferramentas, linguagens, frameworks e a utilização de imagens docker - que contém todas as peças de software que o desenvolvedor precisa, podendo ser disponibilizado em minutos. Tudo isso em um ambiente unificado e padronizado de operação e desenvolvimento, com liberdade para o desenvolvedor e controle para operação. Mas para que isso ocorra, a criação de processos de homologação, teste e quality assurance é fundamental, bem como a revisão e simplificação dos processos existentes. Como costuma-se dizer: não existe DevOps in a Box. Ou seja, para implantar uma abordagem de DevOps é necessária uma mudança cultural, de processos e implantação de ferramentas abertas e flexíveis.

Em resumo, o container propõe uma arquitetura mais moderna, dissociada dos padrões proprietários, para que se possa desenvolver e operar com qualquer hardware. A tecnologia de docker, juntamente com Kubernetes, tem a inteligência de alocar, de forma automática, novas instâncias de microsserviços das aplicações ao detectar qualquer falha e de acionar ou adormecer microsserviços de uma aplicação, desde que a configuração tenha sido pensada para atender a esses requisitos. É uma tecnologia ágil, leve, com baixíssimo overhead, feita para qualquer modelo de negócio e que está se revelando a base da nova arquitetura de software para aplicações preparadas para cloud computing, substituindo - com vantagens - a tecnologia de máquinas virtuais (mesmo que possa conviver com ela), que aos poucos está se tornando obsoleta.

Se ainda resta alguma dúvida sobre a efetividade dos containers, saiba que a Amadeus, principal plataforma de reservas aéreas, só consegue atender à demanda com a tecnologia de containers, com o OpenShift. Então, pode-se afirmar que o uso efetivo da infraestrutura de cloud computing, tanto pública como privada, só é possível com a adoção de containers.

Siga o Canaltech no Twitter!

Não perca nenhuma novidade do mundo da tecnologia.