networknt / microservices-framework-benchmark

Raw benchmarks on throughput, latency and transfer of Hello World on popular microservices frameworks
MIT License
705 stars 127 forks source link

Javalin 'Hello world!' application #65

Closed JindrichPilar closed 4 years ago

JindrichPilar commented 4 years ago

Hello world application for the Javalin framework (solves https://github.com/networknt/microservices-framework-benchmark/issues/58).

Uses maven shade plugin to create executable fat jar.

stevehu commented 4 years ago

@JindrichPilar Thanks a lot for your contribution. We recently switched from HTTP to HTTPS (Optional HTTP/2) for all the tests. It is more suitable for production than a dummy test and can easily eliminate frameworks that are not production ready. Would you be able to enable the HTTPS/HTTP2 for the Javalin?

JindrichPilar commented 4 years ago

@stevehu HTTP(S)/2 support added. Ports 8080 and 8443.

stevehu commented 4 years ago

@JindrichPilar for some reason, the https doesn't work.

steve@freedom:~/networknt/microservices-framework-benchmark$ wrk -t4 -c128 -d30s https://localhost:8443 -s pipeline.lua --latency -- / 16
Running 30s test @ https://localhost:8443
  4 threads and 128 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     0.00us    0.00us   0.00us    -nan%
    Req/Sec     0.00      0.00     0.00      -nan%
  Latency Distribution
     50%    0.00us
     75%    0.00us
     90%    0.00us
     99%    0.00us
  0 requests in 30.01s, 0.00B read
  Socket errors: connect 0, read 210183, write 0, timeout 0
Requests/sec:      0.00
Transfer/sec:       0.00B
steve@freedom:~/networknt/microservices-framework-benchmark$ wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 16
Running 30s test @ http://localhost:8080
  4 threads and 128 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    38.98ms   52.73ms 564.62ms   86.07%
    Req/Sec   111.61k    55.02k  222.63k    63.22%
  Latency Distribution
     50%   16.47ms
     75%   54.36ms
     90%  114.21ms
     99%  227.66ms
  13047542 requests in 30.06s, 1.59GB read
Requests/sec: 434065.06
Transfer/sec:     54.23MB
stevehu commented 4 years ago

@JindrichPilar There is an issue with HTTPS under high load. I am wondering if you could take a look at it. I also record a video here

JindrichPilar commented 4 years ago

I will take a look, I think I have time tomorrow.

On Tue, 17 Mar 2020, 22:18 Steve Hu, notifications@github.com wrote:

@JindrichPilar https://github.com/JindrichPilar There is an issue with HTTPS under high load. I am wondering if you could take a look at it. I also record a video here https://www.youtube.com/watch?v=VGMuoWfn4jc&list=PL6icvRU_5ZOVKD9slJTArx74O_CVQf8La

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/networknt/microservices-framework-benchmark/pull/65#issuecomment-600306182, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAWYTT3ARWISANULL5BAU2LRH7SKFANCNFSM4LMG5JMQ .

JindrichPilar commented 4 years ago

It seems there was a problem with protocol negotiation in my Jetty configuration. Wrk wasn't able to automatically fallback to HTTP 1.1 + TLS. Curl with explicit --http1.1 or --http2 was able to switch protocols. While it seems wrk doesn't support HTTP/2, I was able to measure noticeable difference in throughput between 8443 and 9443 ports.

I updated the configuration and added another port, so now: 8080 - plain HTTP 8443 - HTTP1.1 + TLS 9443 - HTTP/2 with fallback to HTTP1.1 + TLS