Escalabilidade horizontal automática de serviços utilizando o componente HPA do Kubernetes

Pacheco, Diego Rodrigo Perez (2023-12-21)

tcc

O mercado de computação em nuvem tem previsão para movimentar em torno de US$ 31,4 Bilhões até 2025, um aumento de aproximadamente 196,23% em relação a 2020 que apresentou uma movimentação de US$10,6 Bilhões. A nuvem foi impulsionada em princípio pela pandemia, que forçou trabalho remoto nos mais diversos setores e as empresas precisaram manter seu funcionamento. Além disso, estima-se que até 2025, 85% das empresas operem dentro da nuvem. Dentre as vantagens disponibilizadas pela nuvem está estabilidade, escalabilidade, redução de custo, entre outras. Entretanto, não é trivial a migração para computação em nuvem e a utilização dos serviços em nuvem possuem diversas formas de serem hospedadas, uma das dificuldades é inclusive escolher qual é a melhor forma de migrar a aplicação de maneira que ela se mantenha escalável e atenda as necessidades do negócio. Neste trabalho, desenvolvemos uma solução para automatizar a escalabilidade horizontal de aplicações, com o objetivo de otimizar recursos e aprimorar tanto a escalabilidade quanto a elasticidade. A escalabilidade horizontal consiste em adicionar computing nodes no sistema enquanto a escalabilidade trás um aspecto dinâmico no provisionamento de recurso em resposta a um aumento ou redução de consumo da aplicação. A aplicação de exemplo do trabalho é disponibilizada por meio de APIs. O sistema recebe as informações de consumo de recursos dos serviços e a partir disso gera uma nova instância da aplicação com um balanceamento de carga para dividir a carga. A aplicação monitora periodicamente os recursos de memória e CPU e, ao atingir um dado limiar (ex: 80%) de consumo configurado para cada recurso, o sistema gera uma nova instância. Além disso, é utilizado o recurso do Kubernetes chamado HPA (Horizontal Pod Autoscale) para automatizar a alocação e desalocação de instâncias. O HPA foi configurado para verificar a cada 15 segundos o consumo dos recursos. Realizamos diversos testes, dentre eles foi utilizado duas configurações: (1) com requisições de processamento leve, mas com alto tráfego e outra (2) de processamento pesado com tráfego menor, para exemplificar dois cenários de aplicação. Após os testes, verificamos que em ambos os casos o sistema escalou apropriadamente de acordo com a demanda, o que demonstra que a solução realmente é escalável. Portanto, o cluster responde dinamicamente para alocação e desalocação de recursos de forma automática ajudando na economia dos gastos com computação em nuvem, além de ajudar a distribuir melhor os recursos do cluster. A solução foi construída como prova de conceito, realizamos testes em uma máquina local, mas esta solução pode ser implementada em qualquer nuvem que tenha Kubernetes como serviço ou máquinas disponíveis para instalação, atendendo a escalabilidade necessária para modelos de negócio que proveem diversos tipos de serviço, com pequenas alterações pode ser generalizada para outras aplicações.

O mercado de computação em nuvem tem previsão para movimentar em torno de US$ 31,4 Bilhões até 2025, um aumento de aproximadamente 196,23% em relação a 2020 que apresentou uma movimentação de US$10,6 Bilhões. A nuvem foi impulsionada em princípio pela pandemia, que forçou trabalho remoto nos mais diversos setores e as empresas precisaram manter seu funcionamento. Além disso, estima-se que até 2025, 85% das empresas operem dentro da nuvem. Dentre as vantagens disponibilizadas pela nuvem está estabilidade, escalabilidade, redução de custo, entre outras. Entretanto, não é trivial a migração para computação em nuvem e a utilização dos serviços em nuvem possuem diversas formas de serem hospedadas, uma das dificuldades é inclusive escolher qual é a melhor forma de migrar a aplicação de maneira que ela se mantenha escalável e atenda as necessidades do negócio. Neste trabalho, desenvolvemos uma solução para automatizar a escalabilidade horizontal de aplicações, com o objetivo de otimizar recursos e aprimorar tanto a escalabilidade quanto a elasticidade. A escalabilidade horizontal consiste em adicionar computing nodes no sistema enquanto a escalabilidade trás um aspecto dinâmico no provisionamento de recurso em resposta a um aumento ou redução de consumo da aplicação. A aplicação de exemplo do trabalho é disponibilizada por meio de APIs. O sistema recebe as informações de consumo de recursos dos serviços e a partir disso gera uma nova instância da aplicação com um balanceamento de carga para dividir a carga. A aplicação monitora periodicamente os recursos de memória e CPU e, ao atingir um dado limiar (ex: 80%) de consumo configurado para cada recurso, o sistema gera uma nova instância. Além disso, é utilizado o recurso do Kubernetes chamado HPA (Horizontal Pod Autoscale) para automatizar a alocação e desalocação de instâncias. O HPA foi configurado para verificar a cada 15 segundos o consumo dos recursos. Realizamos diversos testes, dentre eles foi utilizado duas configurações: (1) com requisições de processamento leve, mas com alto tráfego e outra (2) de processamento pesado com tráfego menor, para exemplificar dois cenários de aplicação. Após os testes, verificamos que em ambos os casos o sistema escalou apropriadamente de acordo com a demanda, o que demonstra que a solução realmente é escalável. Portanto, o cluster responde dinamicamente para alocação e desalocação de recursos de forma automática ajudando na economia dos gastos com computação em nuvem, além de ajudar a distribuir melhor os recursos do cluster. A solução foi construída como prova de conceito, realizamos testes em uma máquina local, mas esta solução pode ser implementada em qualquer nuvem que tenha Kubernetes como serviço ou máquinas disponíveis para instalação, atendendo a escalabilidade necessária para modelos de negócio que proveem diversos tipos de serviço, com pequenas alterações pode ser generalizada para outras aplicações.