Uberlândia - MG
+55 (34) 3016-0600

O que são contêineres e o que eles agregam no seu software?

O que são contêineres e o que eles agregam no seu software?

O paradigma de contêineres em nuvem sempre vai ser uma dúvida recorrente no mercado de software, afinal, o mundo monolítico viveu a era de aplicações implantadas diretamente no servidor com alto acoplamento envolvido por décadas.

Neste artigo, cito alguns dos motivos para optar por contêinerizar as suas próximas aplicações.

Afinal, o que é um contêiner?

O que são contêineres e o que eles agregam no seu software?

Contêiner em tecnologia, significa um pacote de definições completo para executar determinado software ou conjunto de software, sendo assim, é possível definir o sistema operacional/distribuição, os recursos desse sistema, pacotes de software instalados, arquivos de configuração e praticamente tudo que é feito de forma manual específica em um servidor dedicado.

De forma superficial, um contêiner é uma mini-máquina virtual gerenciada pelo servidor ou pelo software/solução de gerenciamento adotada.

Lembrando: contêiner não é máquina virtual (apesar de poder ter características de limite de memória e CPU) – No final do dia, quem executa e isola o seu contêiner dos demais (e do próprio sistema operacional) é a engine que está em execução para provisionar tais contêineres.

O que o contêiner resolve?

O que são contêineres e o que eles agregam no seu software?

Na prática, um contêiner resolve todos os problemas encontrados em aplicações executando em servidores dedicados e configurados para a mesma.

Dentro de um contêiner, são definidos e implementados sob demanda componentes específicos para a execução daquela aplicação, ou seja, é possível em um só servidor executar duas aplicações que hipoteticamente, seriam incompatíveis para execução em um servidor só, por motivos de configurações que possivelmente poderiam apresentar conflitos etc.

O que é escala horizontal / vertical e o que cada uma traz para a escalabilidade da aplicação?

O que são contêineres e o que eles agregam no seu software?

De forma simples, escalar verticalmente uma aplicação seria adicionar recursos ao servidor está executando o software.

Ou seja, adicionar mais memória, mais processador, mais armazenamento, mais capacidade de transações.

Mas isso tem limite, tanto de hardware quanto de software, em algum momento a conta da nuvem vai chegar e o servidor entrará em gargalo, dependendo da arquitetura da aplicação adotada.

Em contrapartida, escalar horizontalmente uma aplicação significa multiplicar as instâncias da mesma forma unitária, em poucas palavras, criar pequenos “servidores” executando a mesma aplicação sem que haja problemas para o usuário final.

O segredo e a mágica disso é: Fazer de forma autônoma, resiliente e o mais importante: sem causar problemas na execução da aplicação.

Atualmente, é relativamente simples escalar uma aplicação horizontalmente, mas muito complicado ter arquitetura para isso, ainda mais falando de sistemas legado que são evoluídos de forma descontrolada e que tem a necessidade de escalar pela quantidade de transações simultâneas.

Diferença principal entre escala horizontal e vertical: Redução de custos.

Em uma arquitetura orientada a micro-serviços, é esperado que somente determinadas areas da aplicação escalem de forma autônoma em situações de pico, ou seja, em vez de ter um “super-servidor” custando $30.000 mensal, teríamos alguns pequenos servidores gerenciados custando em alguns casos, uma fração disso.

“Zero” dependências de servidor, mas compartilhando o kernel

O que são contêineres e o que eles agregam no seu software?

Muito se fala em aplicações para a nuvem, porém, não necessariamente estar em nuvem significa estar operando de forma nativa (ou cloud-native).

Se seu software executa 100% dependente de uma máquina virtual em nuvem configurada especificamente para atender aos requisitos de infraestrutura da sua aplicação, a sua aplicação não é nativa para a nuvem.

Um gestor de contêineres compartilha o kernel do servidor com os contêineres de forma isolada, diferentemente de uma máquina virtual, que tem seu próprio sistema operacional e kernel consumindo recursos.

Um resumo desse conceito = Performance e mais recursos do servidor livres para utilização, mantendo a segurança e isolamento de aplicações conforme configurado.

Aplicações nativas para nuvem são o padrão obrigatório para os novos desenvolvimentos

O que são contêineres e o que eles agregam no seu software?

Diversas aplicações neste momento estão sendo desenvolvidas sem nenhum tipo de pensamento envolvendo os cenários de nuvem nativa, ou seja, arquitetura está sendo desenvolvida para funcionar como monolítico, altamente dependente do servidor de aplicação em que estará configurado especificamente para executar determinada plataforma.

No cenário acima citado, há vários pontos negativos, sendo o primeiro a escalabilidade, uma vez que um dos processos de arquitetura de software nativo para a nuvem é definir a capacidade de escalonamento tendo uma arquitetura compatível para tal.

Orquestração de contêineres é um dos passos mais importantes

O que são contêineres e o que eles agregam no seu software?

Quando se fala em alta disponibilidade envolvendo sistemas, uma das primeiras tarefas é desenvolver uma aplicação nativa para a nuvem.

Uma boa aplicação nativa para a nuvem deixará possibilidades de escala horizontal livre, ou seja, a solução de gestão dos contêineres em nuvem poderá multiplicar o número de instâncias da aplicação sob a demanda dos usuários, sem que aplicação pare de funcionar ou cause erros imprevistos ou até mesmo, sem que haja perca de informações.

Uma solução de orquestração de contêineres visa gerenciar o ciclo de vida de cada parte da aplicação, de preferência sobre a demanda dos usuários e com escala automática.

A escolha da melhor solução para orquestrar os contêineres faz parte do sucesso de um projeto, nem todas as soluções que orquestram contêineres serão um exato sucesso para todas as ocasiões, cabe uma análise profunda dos requisitos e arquitetura para chegar a definição de custo-benefício na hora de escolher uma solução de gerenciamento.

Nem toda aplicação está preparada para executar em contêineres

O que são contêineres e o que eles agregam no seu software?

Não seria um fato verdadeiro se eu afirmasse que toda aplicação pode ser adaptada para execução em contêineres, pois as variáveis são muitas e muitas vezes, para estar em um contêiner, é necessário que a plataforma dê um mínimo suporte para isto.

Quando falo plataforma, estou falando tanto da linguagem ou framework utilizado, quanto a metodologia e arquitetura de implementação adotada.

Existem duas formas de execução básicas de um contêiner, stateless e stateful.

Há uma diferença significativa entre as duas, começando pelo stateless, que significa uma metodologia de execução totalmente desvinculada da instância da imagem/servidor em execução.

Um exemplo bem claro de aplicações stateless são micro serviços, que devem (ou deveriam) ser autônomos e independentes, sem nenhuma dependência direta do ambiente de execução nem da execução unitária do contêiner.

Resumindo, uma aplicação stateless não pode armazenar dados em memória que são utilizados após a finalização da requisição, caso contrário, usuários ou processos que dependem dos dados que esta aplicação cria dinamicamente em memória (ou disco – caso não haja mapeamento de múltipla leitura/escrita) podem ficar comprometidos.

Aplicações stateful tem requisitos severos envolvendo o estado do contêiner antes e depois da instância, ou seja, são contêineres que dependem de arquivos e / ou dados na memória para executar, e isso impõe limitações de escalabilidade dependendo do acoplamento que esta aplicação tem.

Esse é um dos maiores desafios para escalar horizontalmente uma solução, seguido pela dependência entre outras partes da aplicação (micro-serviços), que devem ser orientados a event-bus (e dificilmente são implementados com esse pensamento).

A solução do seu problema está conosco

O que são contêineres e o que eles agregam no seu software?

Nós da AAG Soluções prestamos consultoria a nível de hardware e software, entendemos todo o ciclo de vida de uma aplicação, desde a infraestrutura e redes até o software e todas as suas dependências.

Contamos com expertise de mais de 10 anos no mercado e temos soluções prontas para produção globalmente utilizadas.

Contacte um de nossos consultores e conheça melhor o que nós podemos fazer para impulsionar o sucesso do seu negócio.

Conteúdo 100% autoral, baseado em experiências e fatos reais.

Escrito por Michel Oliveira, CEO da AAG Soluções em 25 de abril de 2020.