Se pone a disposición dos aplicaciones app-go y app-java desplegables en contenedores Docker.
Medir rendimiento Java vs Go con Jmeter para servicios HTTP.
Se plantea contar con dos aplicaciones similares pero con diferente lenguaje, siendo estos java y go, conectadas a un motor de base de datos Postgresql.
Las aplicaciones deben exponer servicios HTTP para ser consumidos con la herramienta Jmeter, la cual permitirá observar el rendimiento.
Es recomendable descargar la el proyecto dentro de go/src
para ejecutar sin inconvenientes la aplicación app-go
# Descargar proyecto en path go/src
cd ~/go/src
git clone https://github.com/janusky/java-vs-go.git github.com/janusky/java-vs-go
cd github.com/janusky/java-vs-go
Al ejecutarse jmeter
debe indicarse los parámetros
- -JHOST=localhost
- -JPORT=[8080/8000]
- -JNUM_USERS=1
NOTA: Para aplicación
golang
el puerto por defecto es 8000, a diferencia de la aplicación java que es 8080.
# Ejecutar jmeter (8000 o 8080)
jmeter -JHOST=<host> -JPORT=<port> -JNUM_USERS=1 -n -t app-test.jmx -l results.csv
cd ~/go/src/github.com/janusky/java-vs-go/app-go
# Up app-go (docker-compose up -d)
docker-compose up -d --build
cd ../test
# Ejecutar jmeter
jmeter -JHOST=localhost -JPORT=8000 -JNUM_USERS=100 -n -t app-test.jmx -l resultsGO.csv -j jmeterGO.log
# END compose: cd ../app-go o cd ~/go/src/github.com/janusky/java-vs-go/app-go
docker-compose down -v
cd ~/go/src/github.com/janusky/java-vs-go/app-java
# Up app-go (docker-compose up -d)
docker-compose up -d --build
cd ../test
# Ejecutar jmeter
jmeter -JHOST=localhost -JPORT=8080 -JNUM_USERS=100 -n -t app-test.jmx -l resultsJAVA.csv -j jmeterJAVA.log
Se hace difícil demostrar que Go
es mejor, porque el tiempo de ejecución en las peticiones es determinado por la conexión a la base de datos utilizada.
Si se necesita una aplicación para resolver un modelo de negocio amplio, el cual requiere intervención de muchos desarrolladores, usaría Java
. Si el desarrollo es pequeño y se pretende hacer simple y rápido usaría Go
.
Siempre utilizaría Go para los casos de aplicaciones desktop, y aquellos donde el motor de base de datos no sea el determinate en las métricas resultantes.
- Se encuentra post en dzone (java-vs-go-multiple-users-load-test-1)
- https://github.com/nikitsenka/bank-test