Final decision on JAX-RS kernel reached

master
Edward M. Kagan 4 years ago
parent ccb8ba8019
commit f5d28ba2c4

@ -1,54 +1,5 @@
# JAX-RS compliant kernels test
## Build time (for reference only)
| Kernel | time |
| ------------------------ | ------- |
| quarkus-resteasy-jackson | 1.463 s |
| quarkus-resteasy-jsonb | 0.943 s |
| jersey-grizzly2 | 1.029 s |
| jersey-jdk-http | 0.350 s |
| jersey-simple-http | 0.370 s |
| jersey-jetty | 0.465 s |
| jersey-netty | 0.596 s |
| jersey-netty | 0.596 s |
| jersey-netty | 0.596 s |
| jersey-netty | 0.596 s |
| rawnetty | 0.659 s |
| jooby-netty | 0.497 s |
| jooby-jetty | 0.360 s |
| jooby-undertow | 0.410 s |
| resteasy-jdk-http | 0.319 s |
| resteasy-netty | 0.603 s |
| resteasy-reactor-netty | 0.813 s |
| resteasy-vertx | 0.648 s |
| resteasy-undertow | 0.568 s |
| cxf-jetty | 0.572 s |
| cxf-netty | 0.618 s |
| cxf-undertow | 0.691 s |
## JDK performance averages
| version | libc | jdk | avg(req/sec) | % worse |
| ------- | ---- | ----------------- | ---------------- | ------- |
| 17 | glib | azul@zulu-openjdk | 2652190.57575758 | 0.00% |
| 17 | glib | openjdk | 2563225.91666667 | -3.35% |
| 17 | glib | eclipse-temurin | 2556843.05555556 | -3.60% |
| 11 | musl | azul@zulu-openjdk | 2543225.91666667 | -4.11% |
| 17 | musl | amazoncorretto | 2541763.11111111 | -4.16% |
| 17 | musl | eclipse-temurin | 2531755.72727273 | -4.54% |
| 17 | musl | azul@zulu-openjdk | 2524027.27777778 | -4.83% |
| 17 | glib | amazoncorretto | 2523101.08333333 | -4.87% |
| 11 | glib | amazoncorretto | 2518183.84615385 | -5.05% |
| 11 | musl | amazoncorretto | 2516931.75 | -5.10% |
| 11 | glib | azul@zulu-openjdk | 2513074.48484848 | -5.25% |
| 11 | musl | eclipse-temurin | 2484351.47222222 | -6.33% |
| 11 | glib | eclipse-temurin | 2483621.30555556 | -6.36% |
| 11 | glib | openjdk | 2459857 | -7.25% |
| 17 | musl | openjdk | 2299278 | -13.31% |
# Rounds
## Round I
Run tests with 100 connections. These modules performed as shit:
@ -89,18 +40,63 @@ bad mean response time and problems with compatibility
## Round III
survivor jdks (for resteasy-vertx):
survivor jdks:
- eclipse-temurin:17-alpine
- amazoncorretto:11-alpine
- amazoncorretto:17-alpine
survivor modules:
- jooby-undertow
- resteasy-vertx
Best performance:
- resteasy-vertx + amazoncorretto:11-alpine
- jooby-undertow + 17-alpine
- jooby-undertow + eclipse-temurin:17-alpine
Best stability:
- resteasy-vertx + amazoncorretto:17-alpine
- jooby-undertow + 17-alpine
- jooby-undertow + eclipse-temurin:17-alpine
## Round IV (finals)
Overall best JAX-RS kernel to utilize: resteasy with vert.x backend
Alternative kernel to look at if main failes: jooby with undertow backend
Best JDK for performance and stability: amazoncorretto:11-alpine
Best JDK for stability: amazoncorretto:17-alpine
Alternative in case of amazon collapse: eclipse-temurin:17-alpine
# Conclusion
Start new kernel based around JAX-RS methodologym, use Vert.X eco-system where possible. End-to-end test for jooby-undertow & resteasy-vertx with websockets and PostgreSQL needed. Also ORM layer need more tests.
## Build time (for reference only)
| Kernel | time |
| ------------------------ | ------- |
| quarkus-resteasy-jackson | 1.463 s |
| quarkus-resteasy-jsonb | 0.943 s |
| jersey-grizzly2 | 1.029 s |
| jersey-jdk-http | 0.350 s |
| jersey-simple-http | 0.370 s |
| jersey-jetty | 0.465 s |
| jersey-netty | 0.596 s |
| jersey-netty | 0.596 s |
| jersey-netty | 0.596 s |
| jersey-netty | 0.596 s |
| rawnetty | 0.659 s |
| jooby-netty | 0.497 s |
| jooby-jetty | 0.360 s |
| jooby-undertow | 0.410 s |
| resteasy-jdk-http | 0.319 s |
| resteasy-netty | 0.603 s |
| resteasy-reactor-netty | 0.813 s |
| resteasy-vertx | 0.648 s |
| resteasy-undertow | 0.568 s |
| cxf-jetty | 0.572 s |
| cxf-netty | 0.618 s |
| cxf-undertow | 0.691 s |

File diff suppressed because it is too large Load Diff

@ -5,35 +5,33 @@ test () {
xterm -e "docker run --rm -it -p 8080:8080 -w /root -v $parentdir/docker/jars/$1:/root $2:$3 java -jar app.jar" &
TEST_DOCKER_PID=$!
sleep 1
./wrk-test.sh $1 $2 $3 12 64 15
./wrk-test.sh $1 $2 $3 6 64 60
sleep 1
./wrk-test.sh $1 $2 $3 12 128 15
./wrk-test.sh $1 $2 $3 6 256 60
sleep 1
./wrk-test.sh $1 $2 $3 12 256 15
./wrk-test.sh $1 $2 $3 6 1024 60
sleep 1
./wrk-test.sh $1 $2 $3 12 512 15
./wrk-test.sh $1 $2 $3 6 2048 60
sleep 1
./wrk-test.sh $1 $2 $3 12 1024 15
./wrk-test.sh $1 $2 $3 6 4096 60
sleep 1
./wrk-test.sh $1 $2 $3 12 64 60
sleep 1
./wrk-test.sh $1 $2 $3 12 256 60
sleep 1
./wrk-test.sh $1 $2 $3 12 1024 60
sleep 1
./wrk-test.sh $1 $2 $3 12 2048 60
sleep 1
./wrk-test.sh $1 $2 $3 12 4096 60
kill $TEST_DOCKER_PID
}
modules=( 'quarkus-resteasy-jackson' 'quarkus-resteasy-jsonb' 'jersey-grizzly2' 'jersey-jdk-http' 'jersey-simple-http' 'jersey-jetty' 'jersey-netty' 'jersey-netty' 'jersey-netty' 'jersey-netty' 'jooby-netty' 'jooby-jetty' 'jooby-undertow' 'resteasy-jdk-http' 'resteasy-netty' 'resteasy-reactor-netty' 'resteasy-vertx' 'resteasy-undertow' 'cxf-jetty' 'cxf-netty' 'cxf-undertow' )
versions=( '11' '17' )
for version in "${versions[@]}"
do
jkds=( 'amazoncorretto' 'azul/zulu-openjdk' 'azul/zulu-openjdk-alpine' 'eclipse-temurin' 'openjdk' )
for jdk in "${jkds[@]}"
do
for module in "${modules[@]}"
do
test $module $jdk $version
done
done
done
modules=( 'jooby-undertow' 'resteasy-vertx' )
versions=( '11-alpine' '17-alpine' )
for version in "${versions[@]}"
do
jkds=( 'amazoncorretto' 'eclipse-temurin' 'openjdk' )
jkds=( 'amazoncorretto' 'eclipse-temurin' )
for jdk in "${jkds[@]}"
do
for module in "${modules[@]}"

Loading…
Cancel
Save