Utilização de containers de aplicação em Cloud Computing

Por dti digital|
Atualizado: Jul 2023 |
Publicado: Mar 2016

Como já foi abordado anteriormente neste blog, o conceito de Cloud Computing é algo que ganha cada vez mais espaço no mercado de TI. Já citamos anteriormente alguns conceitos e vantagens proporcionados pelo Cloud Computing, bem como um exemplo e pontos a serem considerados na migração de um sistema legado para o Microsoft Azure, que é uma das plataformas em nuvem mais consolidadas atualmente.
Um dos avanços trazidos pela Cloud Computing está na escalabilidade e flexibilidade conseguida na hospedagem e execução de aplicações. Três mecanismos de hospedagem das plataformas em nuvem se destacam nesse cenário: máquinas virtuais, serviços de nuvem e, mais recentemente, containers de aplicação.

Vamos começar falando das máquinas virtuais, que é base para os outros dois mecanismos citados. Em Cloud Computing, a máquina virtual nada mais é do que a partição de um servidor na nuvem, que provê toda a estrutura operacional para a hospedagem e execução de uma aplicação, mantendo-a ao mesmo tempo isolada do sistema operacional do seu hospedeiro. Neste sentido, as máquinas virtuais trouxeram avanços na segurança e flexibilidade de configuração de aplicações. Por outro lado, elas ainda mantêm a necessidade de um trabalho de administração muito grande para o responsável pela aplicação e, desse modo, ainda ficam devendo em facilidade de gerenciamento e na agilidade de execução das mesmas.
Para trazer maiores ganhos nestes quesitos, existem os serviços de nuvem, que utilizam um conceito conhecido como PaaS (Platform as a Service). Num serviço de nuvem é possível hospedar e gerenciar diferentes processos de uma mesma aplicação, os quais são conhecidos como web roles e worker roles. Ambas são gerenciadas de maneira semelhante pela plataforma, com a diferença básica de que uma web role executa em um servidor Web (IIS, no caso do Windows Azure) e responde somente a requisições de usuários externos à aplicação. Para executar cada role, o serviço de nuvem instancia uma ou mais máquinas virtuais. É possível configurar o tamanho da máquina virtual de cada role, de modo a atender as diferentes necessidades de processamento que as diferentes roles podem vir a ter. Além disso, é possível configurá-las para terem mecanismo de autoescala até um número máximo de instâncias de máquinas virtuais. Em outras palavras, é possível instanciar uma nova máquina virtual para uma role quando as demais instâncias que a atendem atingem o seu limite de processamento, até que um número máximo de instâncias seja atingido. Logo, se tira em parte o trabalho de administração para o responsável pela aplicação, trazendo mais agilidade em sua execução e facilidade em seu gerenciamento.
Outro mecanismo que pode ser utilizado em Cloud Computing é o de containers de aplicação. Eles consistem de regiões isoladas do restante da máquina hospedeira (seja ela física ou virtual), que podem prover os recursos operacionais necessários para hospedar um processo ou uma aplicação. Vários containers podem ser instanciados dentro de uma mesma máquina virtual e o isolamento garante que cada aplicação não tenha acesso, nem seja acessada por nada fora do seu container hospedeiro. Trazendo para o contexto de Cloud Computing, embora o uso de containers de aplicação não tenha nenhuma relação com o uso de serviços de nuvem, é possível fazer uma analogia do primeiro com a hipotética ação de hospedar e executar várias roles de um serviço de nuvem dentro da mesma instância de uma máquina virtual. As primeiras ferramentas a surgirem voltadas para a utilização de containers de aplicação foram voltadas para a utilização em máquinas virtuais com sistema operacional Linux, sendo o Docker a principal delas. Recentemente, a Microsoft também lançou a sua, visando principalmente a utilização no Microsoft Azure. Sua difusão, porém, ainda não chegou perto da alcançada pelo Docker.

Um estudo de caso

Há cerca de 2 anos, uma empresa de gestão de ativos, em parceria com a dti digital technologies, iniciou o desenvolvimento de um projeto de inovação. Um dos requisitos do mesmo foi a hospedagem total da aplicação a ser desenvolvida em uma plataforma na nuvem (até então, algo inédito na empresa). A plataforma escolhida foi o Windows Azure.
Desenhada a arquitetura da aplicação, verificou-se a necessidade de uma interface de interação com usuários externos, além de vários processos internos para processamento dos dados entre diferentes camadas desenhadas para o sistema. Na época, containers de aplicação ainda engatinhavam no mercado, por isso, a escolha final foi pela utilização de serviços de nuvem. Como a utilização de um único serviço de nuvem para todos os processos implicaria no fato de um único deploy impactar toda a aplicação, decidiu-se pelo seguinte agrupamento de processos em diferentes serviços de nuvem:

Um serviço de nuvem contendo somente uma web role correspondente à interface Web;
Um serviço de nuvem contendo algumas worker roles com funcionamento semelhante a gateways;
Um serviço de nuvem contendo as demais worker roles do sistema;

Numa análise inicial, foram definidos tamanhos de máquina virtual e número máximo de instâncias de cada worker role, mas à medida que o sistema foi sendo mais utilizado, verificou-se a necessidade de mudança de algumas destas configurações iniciais, o que foi feito sem grandes dificuldades.
Mais recentemente, porém, foi detectada uma limitação desta estrutura, que poderia ser corrigida a partir da utilização de containers de aplicação (se a arquitetura da aplicação fosse desenhada nos dias de hoje, provavelmente esta teria sido a escolha para o projeto). Mesmo configuradas para instanciar somente uma máquina virtual do menor tamanho disponível no Microsoft Azure, algumas roles consumiam, durante a maior parte do tempo, menos de 10% do processamento disponível na máquina. Ou seja, havia mais de 90% de processamento sendo literalmente desperdiçado nessas roles, já que a cobrança não é feita por taxa de processamento, mas sim por máquina virtual instanciada. Enquanto isso, outras roles operavam próximas do seu limite de processamento, mesmo com várias máquinas virtuais instanciadas.
Este problema diminuiria significativamente com a utilização dos containers de aplicação, já que vários dos processos poderiam ser executados numa mesma máquina virtual. Isso representa, não só uma diminuição drástica nos custos desse projeto em específico, mas também uma tendência para todo o mercado: processamentos cada vez menos sobrecarregados e roles cada vez mais rápidas e eficientes.

Por: Bruno Bazzoni
Revisão: Dandara Chaves

Quer saber mais?

Desenvolvimento de Software

Confira outros artigos

WhatsApp Business na sua estratégia: muito além de um chatbot

Podemos dizer adeus a conversas monótonas com chatbots limitados e sem personalidade. Daqui em diante, veremos interfaces conversacionais oferecendo experiências digitais cada vez mais sofisticadas. Em outro artigo, abordamos como mais experiências estão sendo convertidas, progressivamente, em conversas e como essa tendência é potencializada pelos avanços nos modelos de Inteligência Artificial e nos canais de […]

Desenvolvimento de Software

inteligencia-artificial-ia-como-otimizacao-para-grandes-empresas

A Inteligência Artificial (IA) e otimização operacional nas empresas

Sumário1 Como a Inteligência Artificial (IA) pode otimizar operações empresariais e aumentar a eficiência? Descubra aqui!  2 Automatização de tarefas repetitivas e demoradas 2.1 Exemplos de IA para economia de tempo2.2 10 exemplos de como utilizar a Inteligência Artificial (IA) para automatizar tarefas repetitivas e/ou demoradas: 3 Melhoria da eficiência e redução de custos com Inteligência Artificial (IA)3.1 […]

Desenvolvimento de Software

Desenvolvimento Android e iOS

Desenvolvimento Android x iOS: 10 recomendações para o desenvolvimento produtivo

Entre agosto de 2022 e junho de 2023, o mercado de aplicativos móveis experimentou um crescimento notável, projetando um aumento anual de 13,4% até 2030, alcançando um mercado estimado em US$ 187,58 bilhões. E, certamente, a tendência é que essa expansão continue exponencialmente nos próximos anos.  Portanto, agora é a hora de explorar as oportunidades […]

Desenvolvimento de Software

Veja outros artigos de Desenvolvimento de Software