Avalados por :

Comparação de desempenho entre aplicativos Java Spring Boot e Node.js Express na SAP Cloud Platform

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 10 Vistas
0
Cargando...

Introdução


Os runtimes fornecidos pela SAP Cloud Platform, especialmente os disponíveis no ambiente do Cloud Foundry através do conceito de buildpacks, oferecem aos arquitetos técnicos e desenvolvedores de aplicativos uma ampla variedade de opções em relação à escolha da linguagem de programação, tempo de execução do servidor e framework. Para alguns runtimes, existem casos de uso claros e reconhecidos, mas para outros a escolha não é tão direta. Provavelmente, uma das discussões e debates mais intensos que ocorrem há muitos anos e que é muito relevante para a SAP Cloud Platform é a escolha entre JavaScript do lado do servidor e Java. Para ser mais específico, as discussões geralmente se concentram não tanto nas linguagens de programação em si, mas nos aplicativos desenvolvidos usando frameworks para o tempo de execução do Node.js e os aplicativos desenvolvidos usando o framework Java Spring. Em muitos materiais que abordam esse tema, os aplicativos Java costumam ser considerados mais adequados para operações complexas que potencialmente requerem um alto nível de paralelismo (graças à multithreading do JVM), mas o custo disso é um maior consumo de recursos (especialmente no que diz respeito ao consumo de memória do JVM subjacente), enquanto os aplicativos Node.js são considerados mais leves e adequados para operações não intensivas em CPU e não bloqueantes (graças aos mecanismos de concorrência do Node.js e à natureza não bloqueante do JavaScript). Java costumava estar associado comumente a um modelo de programação imperativo clássico (bloqueante) implementado em um runtime multithread, enquanto o Node.js estava associado a um modelo de programação não bloqueante implementado em um runtime de um único thread com suporte a concorrência. Mas ambas as partes evoluíram ao longo do tempo: os princípios de programação reativa (não bloqueante) foram introduzidos em Java e começaram a ser suportados em versões posteriores do Java e seus frameworks, o Node.js recebeu módulos que fornecem suporte a multithreading...

Neste blog, gostaria de refletir sobre esse tema e fazer uma breve comparação entre dois aplicativos leves: um escrito em Java, baseado no Java Spring Boot e que utiliza módulos Spring Reactive, e o outro escrito em JavaScript, baseado no Node.js e que utiliza o framework Express. Ambos os aplicativos usam a mesma camada de persistência (banco de dados NoSQL - MongoDB), implementam a mesma lógica de consulta e foram implantados na SAP Cloud Platform, ambiente do Cloud Foundry, usando contêineres de tamanhos semelhantes e buildpacks padrão (java_buildpack e nodejs_buildpack, respectivamente). Os aplicativos expõem uma API REST que pode ser consumida para consultar os documentos correspondentes armazenados no repositório do MongoDB. Para os testes de carga, vou usar o Apache JMeter, que produzirá um grande número de solicitações paralelas e invocará os aplicativos sob teste.

O exercício não tem como objetivo comparar o consumo de recursos dos aplicativos (como mencionado anteriormente, os aplicativos Java geralmente têm um maior consumo inicial de memória do que os aplicativos Node.js), nem comparar os padrões de consumo de recursos desses aplicativos quando submetidos a testes de carga (essa análise por si só merece um blog separado detalhado), mas vou me concentrar em uma única métrica - o desempenho.

O blog foi inspirado pelas comparações entre o desempenho dos aplicativos Node.js e Java implantados no Cloud Foundry (por exemplo, consulte o blog escrito por mariusobert ), bem como outras comparações sobre o assunto, publicadas nas comunidades de Java e Node.js.


Visão geral e notas


É apresentado um resumo de alto nível e um diagrama de componentes que mostra os componentes envolvidos utilizados na demonstração a seguir:



A comparação entre um aplicativo Node.js não bloqueante e um aplicativo Java bloqueante em termos de operações de E/S não me parece correta, então vamos manter a paridade aqui e comparar o aplicativo Node.js com o aplicativo Java baseado em princípios reativos.

Outro aspecto importante é que ambos os aplicativos não implementam uma lógica de aplicativo complexa e continuam sendo muito leves (o que também resulta na ausência do uso de alguns padrões de abstração comumente presentes em aplicativos de produção) - no final, os aplicativos apenas vão implementar uma lógica de roteador e controlador muito básica para consultar documentos no repositório do MongoDB.
Juntamente com isso, alguns módulos e funcionalidades importantes que deveriam estar presentes em aplicativos de produção - por exemplo, autenticação e autorização, registro, tratamento abrangente de exceções, etc. - são intencionalmente removidos para manter os aplicativos de demonstração o mais simples possível.


Aplicativos em teste


O aplicativo Java Spring Boot Reactive reutiliza um aplicativo de amostra que foi desenvolvido anteriormente para demonstrar a migração de um aplicativo Spring Boot de um modelo imperativo clássico para um modelo reativo, então consulte meu blog anterior , se desejar obter mais detalhes sobre esse aplicativo. O aplicativo é baseado
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?