Development of Scalable Applications in the Cloud
REGISTRO DOI: 10.69849/revistaft/pa10202411301443
Rafael Tempesta Bertochi
Felipe Diniz Dallilo
Fabiana Florian
Resumo:
Este trabalho tem como objetivo desenvolver um sistema de demonstração para explorar estratégias de escalabilidade em aplicações na nuvem. A computação em nuvem tem se destacado por sua capacidade de oferecer soluções eficientes e adaptáveis a cenários de alta demanda, permitindo que empresas ampliem suas operações com maior estabilidade. Para alcançar os objetivos, foi realizada a implementação de uma aplicação utilizando uma plataforma de computação em nuvem e estratégias apropriadas de escalabilidade. O trabalho incluiu pesquisa bibliográfica, além de experimentos práticos para validar as hipóteses relacionadas à eficiência operacional. Os resultados obtidos destacam que soluções escaláveis são indispensáveis para atender às demandas do mercado e garantir o desempenho consistente dos serviços digitais.
Palavras-chave: Computação em nuvem. Desempenho eficiente. Escalabilidade.
Abstract:
This study aims to develop a demonstration system to explore scalability strategies in cloud applications. Cloud computing has gained prominence for its ability to provide efficient and adaptable solutions to high-demand scenarios, enabling companies to expand their operations with greater stability. To achieve the objectives, an application was implemented using a cloud computing platform and appropriate scalability strategies. The study included bibliographic research and practical experiments to validate hypotheses related to operational efficiency. The results demonstrate that scalable solutions are essential for meeting market demands and ensuring consistent performance of digital services.
Key-words: Cloud computing. Scalability. Operational efficiency
1 INTRODUÇÃO
A computação em nuvem revolucionou a forma como as empresas desenvolvem e entregam serviços digitais, proporcionando flexibilidade, escalabilidade e eficiência sem precedentes. O desenvolvimento de aplicações escaláveis na nuvem emerge como um desafio essencial para garantir a capacidade de expansão e a qualidade dos serviços oferecidos.
Escalabilidade se refere à capacidade de um sistema se expandir para atender à crescente demanda sem comprometer seu desempenho, o que assegura que os serviços digitais permaneçam estáveis, mesmo durante picos de uso, garantindo uma experiência consistente aos usuários. Em um mercado em constante transformação, onde a adaptação rápida é crucial, a escalabilidade deixa de ser um mero benefício técnico, tornando-se uma vantagem estratégica essencial para empresas que buscam se manter competitivas.
Este trabalho apresenta o desenvolvimento de aplicações escaláveis na nuvem, destacando sua importância, os desafios envolvidos e possíveis soluções. O objetivo principal é fornecer subsídios para futuros desenvolvedores e pesquisadores, explorando práticas como escalabilidade horizontal, automação de recursos e o uso de frameworks adequados.
Com o aumento da demanda por serviços digitais e a necessidade de adaptação rápida às mudanças no mercado, o uso de plataformas de computação em nuvem torna-se indispensável para mitigar os desafios de escalabilidade. Como apontam Armbrust et al. (2010), “computação em nuvem não apenas proporciona acesso a recursos computacionais sob demanda, mas também oferece uma estrutura flexível e escalável para atender às necessidades dinâmicas das organizações modernas”. Essa abordagem transforma a maneira como os negócios gerenciam custos e otimizam a entrega de serviços digitais, permitindo que empresas alcancem eficiência e inovação.
A hipótese deste trabalho é que a adoção de práticas apropriadas permite que as empresas desenvolvam e entreguem serviços digitais de forma eficiente e econômica. Para validar essa hipótese, será apresentado um sistema básico de demonstração utilizando uma plataforma de computação em nuvem, acompanhado do uso de ferramentas adequadas de desenvolvimento.
2 REVISÃO BIBLIOGRÁFICA
Para a melhor compreensão sobre o tema em questão, é importante apresentar alguns termos básicos em desenvolvimento de aplicações escaláveis na nuvem, linguagens de programação, ferramentas e serviços utilizados para o desenvolvimento do projeto.
2.1 DEFINIÇÃO DE TERMOS BÁSICOS NO DESENVOLVIMENTO DE APLICAÇÕES ESCALÁVEIS NA NUVEM
Esta seção explora os conceitos fundamentais que sustentam o desenvolvimento de aplicações escaláveis na nuvem, abordando os seguintes tópicos:
- API (Application Programming Interface): Um conjunto de regras e definições que permite a comunicação entre diferentes sistemas. Por meio de uma API, é possível acessar recursos ou funcionalidades de outro software sem necessidade de conhecer os detalhes internos de sua implementação.
- API REST (Representational State Transfer): Um estilo arquitetural amplamente utilizado para projetar APIs que se comunicam por meio do protocolo HTTP. Ele facilita a integração entre sistemas distribuídos de maneira eficiente e padronizada.
- Endpoint: Um ponto de comunicação entre sistemas em uma arquitetura, geralmente descrito por uma URL (Uniform Resource Locator). Conforme definido por Fielding (2000), endpoints são “os pontos de interação entre os sistemas, onde as requisições de clientes e as respostas do servidor são trocadas de maneira padronizada”.
- Requisição: Em uma arquitetura RESTful, uma requisição refere-se à interação entre cliente e servidor, em que o cliente faz um pedido a partir de uma URL específica apontando para um recurso. Segundo Fielding (2000), “uma requisição é o meio pelo qual o cliente solicita um serviço do servidor, que responde de acordo com a solicitação”.
- Contêiner: Uma tecnologia de virtualização leve que encapsula uma aplicação junto com suas dependências em um ambiente isolado. Os contêineres, como os gerenciados pelo Docker, garantem consistência ao executar aplicativos em diferentes ambientes, reduzindo problemas de compatibilidade.
- Computação em nuvem: Um modelo que fornece serviços de computação, como armazenamento, processamento e software, por meio da internet. Esse modelo elimina a necessidade de servidores locais, proporcionando maior flexibilidade e escalabilidade.
- Escalabilidade: A escalabilidade é um elemento crucial em ambientes de computação em nuvem, permitindo que sistemas se adaptem a aumentos na demanda sem comprometer o desempenho. Como destacado por Armbrust et al. (2010), “a escalabilidade é essencial para manter a estabilidade e a qualidade dos serviços digitais durante picos de uso”.
- Aplicações escaláveis: Softwares projetados para lidar com aumentos significativos no número de usuários, na carga de trabalho ou no volume de dados. Essas aplicações mantêm sua disponibilidade e desempenho mesmo sob condições extremas, representando um requisito essencial em sistemas modernos.
2.2 LINGUAGENS DE PROGRAMAÇÃO
As linguagens de programação desempenham um papel fundamental no desenvolvimento de software, fornecendo a estrutura e os meios para que os desenvolvedores possam criar aplicações, desde simples scripts até sistemas complexos, como aqueles utilizados em ambientes de nuvem. Essas linguagens permitem que os computadores executem tarefas específicas, conectando as necessidades do mundo real com soluções computacionais.
Segundo Lutz (2013), “as linguagens de programação são a ponte entre os problemas do mundo real e as soluções computacionais, permitindo a expressão de algoritmos e manipulação de dados de forma estruturada”. Cada linguagem possui suas particularidades, paradigmas e áreas de aplicação, atendendo a diferentes tipos de problemas e cenários.
Dentro dessa diversidade, o Java se destaca como uma das linguagens mais robustas e amplamente utilizadas. Criado por James Gosling na Sun Microsystems em 1995, o Java foi projetado com foco na simplicidade, portabilidade e robustez (SCHILDT, 2018). Sua filosofia “Write Once, Run Anywhere” (WORA) permite que programas escritos em Java sejam executados em qualquer plataforma que possua a Máquina Virtual Java (JVM). Esse nível de portabilidade, aliado a uma comunidade ativa e vasta, consolidou o Java como uma das principais escolhas para o desenvolvimento de sistemas empresariais e a construção de aplicações escaláveis na nuvem (SCHILDT, 2018).
2.3 FERRAMENTAS E SERVIÇOS UTILIZADOS
A escolha de ferramentas e serviços apropriados desempenha um papel crucial na eficiência, desempenho e escalabilidade de aplicações em nuvem. Nesta seção, são apresentados os principais recursos utilizados no desenvolvimento deste trabalho, abrangendo tanto ferramentas de desenvolvimento quanto serviços de infraestrutura em nuvem. Como Fowler (2002) afirma, “um bom design de software não é apenas funcional, mas também deve permitir que o sistema seja modificado e escalado com facilidade ao longo do tempo”.
- Spring Boot: Um framework de código aberto baseado no ecossistema Spring, que simplifica o desenvolvimento de aplicações Java autônomas e produtivas. Ele elimina configurações manuais complexas, oferecendo ferramentas robustas para inicialização e configuração.
- Postman: Ferramenta amplamente utilizada no desenvolvimento e teste de APIs. Com uma interface gráfica intuitiva, permite o envio de requisições HTTP e a análise das respostas, o que é essencial no desenvolvimento de serviços RESTful. Além disso, facilita a documentação e o compartilhamento de APIs entre equipes.
- Locust: Plataforma de código aberto voltada para testes de carga, ideal para simular grandes volumes de usuários e analisar o desempenho de sistemas e aplicações em cenários de alta demanda.
- Docker: Tecnologia de contêinerização que automatiza a criação, envio e execução de aplicações em ambientes isolados. Em cenários de computação em nuvem, o Docker oferece agilidade e escalabilidade, sendo amplamente adotado para orquestrar serviços e garantir consistência nos ambientes de desenvolvimento e produção.
- Amazon Web Services (AWS): Plataforma líder em serviços de computação em nuvem, que disponibiliza recursos como armazenamento, bancos de dados, redes e análise de dados. A AWS é essencial para criar, testar e escalar aplicações, atendendo a diversos casos de uso no mercado.
- Amazon Elastic Container Service (ECS): Serviço gerenciado de orquestração de contêineres, que simplifica a implantação, o gerenciamento e o dimensionamento de aplicações conteinerizadas, garantindo flexibilidade e eficiência operacional.
3 METODOS
Este processo de metodos foi dividido em etapas específicas, como a criação do projeto, o teste dos endpoints, a criação da imagem Docker, o deploy no amazon ECS e o teste de estresse.
3.1 CRIAÇÃO DO PROJETO
Foi desenvolvido um sistema de gerenciamento de funcionários, implementando operações básicas de CRUD (Create, Read, Update e Delete) utilizando o Spring Boot.
Na Figura 1, é possível visualizar os endpoints criados. Cada endpoint foi projetado para responder às requisições HTTP de maneira eficiente, seguindo as boas práticas de desenvolvimento RESTful.
Esse sistema serviu como base para testar e validar os conceitos de escalabilidade e integração com as ferramentas descritas anteriormente, mostrando como uma aplicação simples pode ser preparada para demandas mais complexas em ambientes distribuídos.
Figura 1 – Endpoints Aplicação
Fonte: Autoria Própria
3.2 TESTE DOS ENDPOINTS
Após a criação dos endpoints da API no Spring Boot, o próximo passo foi utilizar o Postman para testar o funcionamento de cada um desses endpoints. Esse processo de teste é crucial para assegurar que a comunicação entre o cliente e o servidor esteja funcionando corretamente.
A Figura 2 apresenta o retorno de uma das requisições realizadas no Postman, onde é possível observar o corpo retornado e os detalhes da comunicação entre o cliente e o servidor. Este processo foi essencial para validar o comportamento da API antes de seguir para a próxima etapa.
Figura 2 – Retorno do endpoint no Postman
Fonte: Autoria Própria
3.3 CRIAÇÃO DA IMAGEM DOCKER
Validado os endpoints, a próxima etapa foi a criação da imagem Docker para facilitar o deployment da aplicação na nuvem. A criação da imagem Docker envolve a definição de um arquivo Dockerfile, onde são especificados todos os requisitos necessários para rodar a aplicação, como dependências, variáveis de ambiente e instruções para compilar e rodar o código.
3.4 DEPLOY NO AMAZON ECS
Após a imagem ser criada com sucesso, ela foi preparada para ser carregada no Amazon Elastic Container Registry, que serve como repositório para imagens Docker, antes de ser enviada para o Amazon ECS, para orquestrar e escalar a aplicação na nuvem de forma eficiente e controlada.
Na Figura 4, é apresentado o serviço em execução no console do Amazon ECS. Este status reflete o deployment bem-sucedido do contêiner, indicando que a aplicação foi iniciada corretamente e está pronta para atender às solicitações.
Figura 4 – Serviço incializado
Fonte: Autoria Própria
3.5 TESTE DE ESTRESSE
Para garantir que a aplicação fosse capaz de escalar adequadamente sob condições de alta demanda, foi realizado um teste de estresse utilizando a ferramenta Locust.O objetivo desse teste foi avaliar como o sistema se comporta ao lidar com um grande número de requisições simultâneas, simulando um cenário de pico de carga de usuários.
O Locust permite a definição de diversos parâmetros, como o número de usuários simultâneos e a frequência das requisições, proporcionando uma análise detalhada do desempenho da aplicação sob estresse.
Através desse processo, foi possível avaliar a capacidade de resposta da aplicação e garantir que ela manteria um desempenho satisfatório mesmo em situações extremas. Esse teste é fundamental para validar a escalabilidade da aplicação e assegurar que o sistema esteja preparado para suportar picos de tráfego sem comprometer a experiência do usuário.
4. RESULTADOS
Com a realização do teste de estresse e a configuração do sistema no Amazon ECS, foi possível validar a capacidade do sistema de responder eficientemente a cenários de alta demanda. O comportamento da aplicação foi monitorado em diferentes situações, demonstrando a robustez e a adaptabilidade da solução desenvolvida para um ambiente de nuvem escalável.
Testes realizados com a ferramenta Locust demonstraram a capacidade do sistema de lidar eficientemente com um alto volume de requisições simultâneas, validando sua escalabilidade e robustez.
Na Figura 5, são apresentados os detalhes do teste de estresse, incluindo as estatísticas das requisições. O teste foi realizado na URL pública fornecida pelo Amazon ECS:
http://java-app-nlb-955e4cb2d0867f61.elb.sa-east-1.amazonaws.com:9095.
Para este teste, o endpoint testado foi o “/api/funcionarios”, sendo realizadas 794.825 requisições ao longo de 14 minutos e 6 segundos.
Figura 5 – Detalhes teste de estresse
Fonte: Autoria Própria
Na Figura 6 é o gráfico com o total de requisições por segundo ao longo do teste. Observa-se uma taxa constante de requisições processadas, com algumas variações momentâneas devido aos picos de carga.
Figura 6 – Gráfico total requisições por segundo
Fonte: Autoria Própria
No gráfico abaixo (Figura 7), é apresentado o tempo de resposta em milissegundos para cada requisição. Durante o teste de estresse, observou-se que o sistema foi capaz de suportar o alto volume de requisições, mantendo os tempos de resposta baixos.
Figura 7 – Gráfico tempo de resposta
Fonte: O Autor (2024)
Os picos de carga observados durante o teste não comprometeram o desempenho do sistema, o que indica que o escalonamento automático no Amazon ECS funcionou de maneira eficiente. Isso demonstra a capacidade de adaptação da infraestrutura em nuvem para lidar com aumentos súbitos na demanda de requisições. Como ilustrado na Figura 8, é possível observar as instâncias adicionais que foram automaticamente criadas conforme a necessidade, assegurando a continuidade da performance sem interrupções. Essa escalabilidade dinâmica permite que a aplicação se ajuste conforme a carga de trabalho, garantindo alta disponibilidade e resiliência.
Figura 8 – Instâncias Criadas
Fonte: O Autor (2024)
5. CONCLUSÃO
Neste trabalho, foi desenvolvido e validado um sistema escalável utilizando tecnologias de contêineres e serviços em nuvem. Os resultados obtidos indicam que o sistema foi capaz de lidar com grandes volumes de requisições simultâneas, sem comprometer o desempenho, devido à implementação de escalonamento automático no Amazon ECS.
Como mostrado nos testes de estresse realizados com a ferramenta Locust, o sistema manteve tempos de resposta adequados, mesmo durante picos de carga.
As vantagens deste trabalho em comparação com abordagens tradicionais incluem a flexibilidade proporcionada pelo uso de contêineres Docker e a escalabilidade automatizada, características essenciais para a implementação de aplicações em ambientes de nuvem. Uma das principais implicações práticas é que esse tipo de arquitetura pode ser utilizado por empresas que precisam de soluções altamente escaláveis, sem a complexidade de gerenciar infraestrutura física.
Porém, como toda solução baseada em nuvem, há custos envolvidos, especialmente em serviços como o ECS, que podem variar conforme o uso e a demanda. O gerenciamento de custos deve ser considerado nas implementações em larga escala.
Este trabalho demonstrou a viabilidade do uso de tecnologias modernas para construir sistemas eficientes e escaláveis, com uma arquitetura simples e robusta. Como recomendação para pesquisas futuras, sugere-se explorar técnicas de otimização de custos em ambientes de nuvem e o uso de outras ferramentas de automação para melhorar a eficiência na orquestração de contêineres.
REFERÊNCIAS BIBLIOGRÁFICAS
ARMBRUST et al. (2010): “A View of Cloud Computing“. Disponível em: https://dl.acm.org/doi/10.1145/1721654.1721672.
AMAZON WEB SERVICES. “O que é o Amazon Elastic Container Service?” AWS, 2024. Disponível em: https://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/Welcom e.html. Acesso em: 26 nov.2024.
FIELDING, ROY THOMAS. “Architectural Styles and the Design of Network- based Software Architectures”. 2000. Disponível em: https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. Acesso em: 20 nov.2024.
FOWLER, M. (2002). “Patterns of Enterprise Application Architecture.” Addison- Wesley Professional. Disponível em: https://dl.ebooksworld.ir/motoman/Patterns%20of%20Enterprise%20Application %20Architecture.pdf.
LUTZ, M. (2013): “Learning Python (5ª ed.)”. O’Reilly Media. Disponível em: https://www.oreilly.com/library/view/learning-python-5th/9781449355722/
SCHILDT, H. “Java: A Beginner’s Guide. 8. Ed”. New York: McGraw-Hill Education, 2018. Disponível em:https://pdfroom.com/books/java-a-beginners-guide-eighth-edition/PXn2GJrKgxV