Skip to content

A comparison of performance strategies between async, reactive, and local threads, using native and non-native Spring Boot, Quarkus and vanilla JAX-RS microservices.

License

Notifications You must be signed in to change notification settings

johnmanko/microservice-performance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Performance Comparision

Performance Comparision

This project contains projects with various performance techniques.

Frameworks

See the following for more information on framework-specific notes:

Prepping tests

The test scripts make use of vegeta or Grafana K6.

brew install vegeta

and/or

brew install k6

To use the xk6 Dashboard, you'll need to install Go and xk6:

brew install golang
go install go.k6.io/xk6/cmd/xk6@latest
go install github.com/grafana/xk6-dashboard/cmd/k6-web-dashboard@latest
xk6 build --with github.com/grafana/xk6-dashboard@latest

Caution

xk6 has now produced a new k6 binary which may be different than the command on your system path! Be sure to run './k6 run <SCRIPT_NAME>' from the '/Users/userA' [or '/home/userA' on Linux] directory.

Launch the service to test:

cd spring-boot-service
./mvnw clean package
docker compose up --build --force-recreate

Run tests

Vegeta:

cd ./scripts/vegeta
./vegeta-test.sh
./vegeta-report.sh

and/or

Grafana K6:

cd ./scripts/k6
./k6-test.sh

or optionally as individual with dashboard view:

./k6-test-dashboard.sh

Spring Boot Test Results

Async (Non-Virtual Threads)

Expand to View Vegeta Report

Spring Boot Async Vegeta Plot

=======================================
./results_async_cf-clean.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.11
Duration      [total, attack, wait]             10.182s, 9.98s, 202.003ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.236ms, 202.073ms, 202.064ms, 202.606ms, 202.783ms, 203.227ms, 204.357ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_async_cf-with-async.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 48.87
Duration      [total, attack, wait]             10.232s, 9.981s, 251.262ms
Latencies     [min, mean, 50, 90, 95, 99, max]  202.378ms, 227.285ms, 227.048ms, 246.484ms, 248.808ms, 252.091ms, 252.725ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_async_cf.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  20   4.00%   ###
[300ms,  500ms]  37   7.40%   #####
[500ms,  1s]     101  20.20%  ###############
[1s,     2s]     126  25.20%  ##################
[2s,     3s]     91   18.20%  #############
[3s,     5s]     72   14.40%  ##########
[5s,     +Inf]   53   10.60%  #######
Requests      [total, rate, throughput]         500, 50.10, 30.80
Duration      [total, attack, wait]             14.514s, 9.981s, 4.533s
Latencies     [min, mean, 50, 90, 95, 99, max]  202.297ms, 2.034s, 1.646s, 5s, 5s, 5.001s, 5.001s
Bytes In      [total, mean]                     5811, 11.62
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           89.40%
Status Codes  [code:count]                      0:53  200:447
Error Set:
Get "http://localhost:8080/async/cf": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_non-async_cf-get.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  24   4.80%   ###
[300ms,  500ms]  35   7.00%   #####
[500ms,  1s]     62   12.40%  #########
[1s,     2s]     129  25.80%  ###################
[2s,     3s]     121  24.20%  ##################
[3s,     5s]     108  21.60%  ################
[5s,     +Inf]   21   4.20%   ###
Requests      [total, rate, throughput]         500, 50.10, 34.44
Duration      [total, attack, wait]             13.91s, 9.98s, 3.93s
Latencies     [min, mean, 50, 90, 95, 99, max]  203.148ms, 2.094s, 1.999s, 3.725s, 4.031s, 5s, 5.001s
Bytes In      [total, mean]                     6227, 12.45
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           95.80%
Status Codes  [code:count]                      0:21  200:479
Error Set:
Get "http://localhost:8080/non-async/cf-get": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_non-async_clean.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.11
Duration      [total, attack, wait]             10.182s, 9.98s, 201.817ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.029ms, 201.98ms, 201.985ms, 202.527ms, 202.733ms, 203.047ms, 203.75ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_reactive_cf-get.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  22   4.40%   ###
[300ms,  500ms]  16   3.20%   ##
[500ms,  1s]     75   15.00%  ###########
[1s,     2s]     144  28.80%  #####################
[2s,     3s]     113  22.60%  ################
[3s,     5s]     109  21.80%  ################
[5s,     +Inf]   21   4.20%   ###
Requests      [total, rate, throughput]         500, 50.10, 34.24
Duration      [total, attack, wait]             13.988s, 9.98s, 4.008s
Latencies     [min, mean, 50, 90, 95, 99, max]  203.104ms, 2.106s, 1.922s, 3.711s, 4.045s, 5.001s, 5.001s
Bytes In      [total, mean]                     6227, 12.45
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           95.80%
Status Codes  [code:count]                      0:21  200:479
Error Set:
Get "http://localhost:8080/reactive/cf-get": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_reactive_cf-with-async.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 48.76
Duration      [total, attack, wait]             10.255s, 9.981s, 274.505ms
Latencies     [min, mean, 50, 90, 95, 99, max]  202.531ms, 229.822ms, 229.902ms, 249.879ms, 253.371ms, 269.975ms, 274.505ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_reactive_cf.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  7    1.40%   #
[300ms,  500ms]  29   5.80%   ####
[500ms,  1s]     87   17.40%  #############
[1s,     2s]     132  26.40%  ###################
[2s,     3s]     90   18.00%  #############
[3s,     5s]     98   19.60%  ##############
[5s,     +Inf]   57   11.40%  ########
Requests      [total, rate, throughput]         500, 50.10, 29.90
Duration      [total, attack, wait]             14.818s, 9.979s, 4.838s
Latencies     [min, mean, 50, 90, 95, 99, max]  220.456ms, 2.287s, 1.969s, 5s, 5.001s, 5.001s, 5.001s
Bytes In      [total, mean]                     5759, 11.52
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           88.60%
Status Codes  [code:count]                      0:57  200:443
Error Set:
Get "http://localhost:8080/reactive/cf": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_reactive_clean.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.10
Duration      [total, attack, wait]             10.183s, 9.98s, 202.893ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.183ms, 202.074ms, 202.07ms, 202.714ms, 202.89ms, 203.42ms, 205.215ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
non-async/clean - Expand to View K6 Report

Spring Boot Async K6 non-async/clean Report

Testing 'non-async/clean' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ non-async/clean

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.2 kB/s
     data_sent......................: 38 kB   926 B/s
     group_duration.................: avg=205.06ms min=201.89ms med=203.14ms max=547.35ms p(90)=204.23ms p(95)=204.48ms
     http_req_blocked...............: avg=13.32µs  min=2µs      med=4µs      max=1.65ms   p(90)=5µs      p(95)=7µs     
     http_req_connecting............: avg=1.96µs   min=0s       med=0s       max=227µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=204.94ms min=201.8ms  med=203.05ms max=544.16ms p(90)=204.07ms p(95)=204.36ms
       { expected_response:true }...: avg=204.94ms min=201.8ms  med=203.05ms max=544.16ms p(90)=204.07ms p(95)=204.36ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=59.48µs  min=24µs     med=52µs     max=1.02ms   p(90)=75µs     p(95)=85.04µs 
     http_req_sending...............: avg=16.28µs  min=7µs      med=13µs     max=483µs    p(90)=20µs     p(95)=25µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=204.86ms min=201.74ms med=202.99ms max=543.96ms p(90)=203.97ms p(95)=204.27ms
     http_reqs......................: 400     9.750771/s
     iteration_duration.............: avg=205.09ms min=201.91ms med=203.16ms max=548.14ms p(90)=204.26ms p(95)=204.52ms
     iterations.....................: 400     9.750771/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m41.0s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m41.0s/1m0s  400/400 shared iters
non-async/cf-get - Expand to View K6 Report

Spring Boot Async K6 non-async/cf-get Report

Testing 'non-async/cf-get' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ non-async/cf-get

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   946 B/s
     group_duration.................: avg=202.92ms min=201.67ms med=202.88ms max=208.68ms p(90)=203.48ms p(95)=203.84ms
     http_req_blocked...............: avg=7.94µs   min=2µs      med=4µs      max=511µs    p(90)=5µs      p(95)=6.04µs  
     http_req_connecting............: avg=1.57µs   min=0s       med=0s       max=175µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.81ms min=201.58ms med=202.77ms max=208.59ms p(90)=203.37ms p(95)=203.7ms 
       { expected_response:true }...: avg=202.81ms min=201.58ms med=202.77ms max=208.59ms p(90)=203.37ms p(95)=203.7ms 
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=55µs     min=25µs     med=50.5µs   max=259µs    p(90)=75µs     p(95)=88.14µs 
     http_req_sending...............: avg=14.74µs  min=7µs      med=12µs     max=369µs    p(90)=18µs     p(95)=21µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.74ms min=201.51ms med=202.7ms  max=208.53ms p(90)=203.3ms  p(95)=203.62ms
     http_reqs......................: 400     9.853917/s
     iteration_duration.............: avg=202.94ms min=201.69ms med=202.9ms  max=208.7ms  p(90)=203.5ms  p(95)=203.86ms
     iterations.....................: 400     9.853917/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.6s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.6s/1m0s  400/400 shared iters
async/cf-clean - Expand to View K6 Report

Spring Boot Async K6 async/cf-clean Report


         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ async/cf-clean

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.2 kB/s
     data_sent......................: 38 kB   922 B/s
     group_duration.................: avg=203.77ms min=201.96ms med=203.01ms max=261.5ms  p(90)=203.63ms p(95)=203.8ms 
     http_req_blocked...............: avg=8.04µs   min=2µs      med=3µs      max=497µs    p(90)=5µs      p(95)=7µs     
     http_req_connecting............: avg=2µs      min=0s       med=0s       max=249µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=203.49ms min=201.86ms med=202.91ms max=248.48ms p(90)=203.51ms p(95)=203.69ms
       { expected_response:true }...: avg=203.49ms min=201.86ms med=202.91ms max=248.48ms p(90)=203.51ms p(95)=203.69ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=56.23µs  min=25µs     med=52µs     max=909µs    p(90)=72µs     p(95)=82µs    
     http_req_sending...............: avg=13.31µs  min=6µs      med=11µs     max=156µs    p(90)=17µs     p(95)=19.04µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=203.42ms min=201.8ms  med=202.85ms max=247.56ms p(90)=203.43ms p(95)=203.63ms
     http_reqs......................: 400     9.81279/s
     iteration_duration.............: avg=203.79ms min=201.98ms med=203.04ms max=261.55ms p(90)=203.66ms p(95)=203.82ms
     iterations.....................: 400     9.81279/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.8s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.8s/1m0s  400/400 shared iters
async/cf - Expand to View K6 Report

Spring Boot Async K6 async/cf Report

Testing 'async/cf' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ async/cf

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 35 kB   867 B/s
     group_duration.................: avg=202.95ms min=201.77ms med=202.92ms max=206.71ms p(90)=203.58ms p(95)=203.71ms
     http_req_blocked...............: avg=9.74µs   min=2µs      med=4µs      max=651µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=2.78µs   min=0s       med=0s       max=380µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.84ms min=201.71ms med=202.81ms max=206.59ms p(90)=203.47ms p(95)=203.59ms
       { expected_response:true }...: avg=202.84ms min=201.71ms med=202.81ms max=206.59ms p(90)=203.47ms p(95)=203.59ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=55.6µs   min=26µs     med=53µs     max=337µs    p(90)=74µs     p(95)=84.04µs 
     http_req_sending...............: avg=13.76µs  min=6µs      med=12µs     max=138µs    p(90)=18µs     p(95)=19.04µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.77ms min=201.65ms med=202.75ms max=206.54ms p(90)=203.4ms  p(95)=203.51ms
     http_reqs......................: 400     9.852281/s
     iteration_duration.............: avg=202.98ms min=201.79ms med=202.93ms max=206.78ms p(90)=203.61ms p(95)=203.75ms
     iterations.....................: 400     9.852281/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.6s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.6s/1m0s  400/400 shared iters
async/cf-with-async - Expand to View K6 Report

Spring Boot Async K6 async/cf-with-async Report

Testing 'async/cf-with-async' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ async/cf-with-async

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 40 kB   976 B/s
     group_duration.................: avg=202.78ms min=201.63ms med=202.79ms max=207.47ms p(90)=203.34ms p(95)=203.6ms 
     http_req_blocked...............: avg=7.41µs   min=2µs      med=4µs      max=557µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=1.61µs   min=0s       med=0s       max=193µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.67ms min=201.54ms med=202.69ms max=207.37ms p(90)=203.23ms p(95)=203.49ms
       { expected_response:true }...: avg=202.67ms min=201.54ms med=202.69ms max=207.37ms p(90)=203.23ms p(95)=203.49ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=54.99µs  min=23µs     med=52µs     max=380µs    p(90)=72.1µs   p(95)=79.04µs 
     http_req_sending...............: avg=14.23µs  min=7µs      med=13µs     max=166µs    p(90)=17.1µs   p(95)=20.04µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.61ms min=201.49ms med=202.63ms max=207.31ms p(90)=203.15ms p(95)=203.41ms
     http_reqs......................: 400     9.860691/s
     iteration_duration.............: avg=202.8ms  min=201.65ms med=202.82ms max=207.49ms p(90)=203.36ms p(95)=203.62ms
     iterations.....................: 400     9.860691/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.6s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.6s/1m0s  400/400 shared iters
reactive/clean - Expand to View K6 Report

Spring Boot Async K6 reactive/clean Report

Testing 'reactive/clean' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/clean

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   928 B/s
     group_duration.................: avg=202.52ms min=201.49ms med=202.33ms max=218.7ms  p(90)=203.08ms p(95)=203.29ms
     http_req_blocked...............: avg=8.3µs    min=2µs      med=3µs      max=648µs    p(90)=5µs      p(95)=6.04µs  
     http_req_connecting............: avg=1.92µs   min=0s       med=0s       max=195µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.41ms min=201.4ms  med=202.21ms max=218.56ms p(90)=202.95ms p(95)=203.15ms
       { expected_response:true }...: avg=202.41ms min=201.4ms  med=202.21ms max=218.56ms p(90)=202.95ms p(95)=203.15ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=53.78µs  min=25µs     med=50µs     max=134µs    p(90)=75µs     p(95)=87.04µs 
     http_req_sending...............: avg=13.7µs   min=7µs      med=12µs     max=109µs    p(90)=17µs     p(95)=21µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.34ms min=201.35ms med=202.15ms max=218.45ms p(90)=202.88ms p(95)=203.06ms
     http_reqs......................: 400     9.873503/s
     iteration_duration.............: avg=202.54ms min=201.51ms med=202.35ms max=218.72ms p(90)=203.11ms p(95)=203.31ms
     iterations.....................: 400     9.873503/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters
reactive/cf-get - Expand to View K6 Report

Spring Boot Async K6 reactive/cf-get Report

Testing 'reactive/cf-get' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/cf-get

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   936 B/s
     group_duration.................: avg=202.91ms min=201.75ms med=202.74ms max=244.24ms p(90)=203.28ms p(95)=203.45ms
     http_req_blocked...............: avg=8.12µs   min=2µs      med=4µs      max=589µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=1.99µs   min=0s       med=0s       max=202µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.8ms  min=201.62ms med=202.62ms max=244.12ms p(90)=203.17ms p(95)=203.32ms
       { expected_response:true }...: avg=202.8ms  min=201.62ms med=202.62ms max=244.12ms p(90)=203.17ms p(95)=203.32ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=55.44µs  min=24µs     med=53µs     max=149µs    p(90)=77µs     p(95)=84.04µs 
     http_req_sending...............: avg=13.49µs  min=6µs      med=12µs     max=106µs    p(90)=17µs     p(95)=20.04µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.73ms min=201.53ms med=202.54ms max=244.07ms p(90)=203.1ms  p(95)=203.23ms
     http_reqs......................: 400     9.854326/s
     iteration_duration.............: avg=202.93ms min=201.78ms med=202.76ms max=244.27ms p(90)=203.3ms  p(95)=203.47ms
     iterations.....................: 400     9.854326/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.6s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.6s/1m0s  400/400 shared iters
reactive/cf - Expand to View K6 Report

Spring Boot Async K6 reactive/cf Report

Testing 'reactive/cf' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/cf

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 36 kB   898 B/s
     group_duration.................: avg=202.63ms min=201.63ms med=202.51ms max=222.51ms p(90)=203.04ms p(95)=203.42ms
     http_req_blocked...............: avg=7.71µs   min=2µs      med=4µs      max=532µs    p(90)=5.1µs    p(95)=8µs     
     http_req_connecting............: avg=1.61µs   min=0s       med=0s       max=182µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.52ms min=201.56ms med=202.42ms max=222.4ms  p(90)=202.93ms p(95)=203.24ms
       { expected_response:true }...: avg=202.52ms min=201.56ms med=202.42ms max=222.4ms  p(90)=202.93ms p(95)=203.24ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=53.41µs  min=24µs     med=51µs     max=152µs    p(90)=72.1µs   p(95)=86µs    
     http_req_sending...............: avg=13.57µs  min=5µs      med=12µs     max=110µs    p(90)=17µs     p(95)=20µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.46ms min=201.49ms med=202.36ms max=222.33ms p(90)=202.86ms p(95)=203.13ms
     http_reqs......................: 400     9.868077/s
     iteration_duration.............: avg=202.65ms min=201.65ms med=202.54ms max=222.53ms p(90)=203.07ms p(95)=203.44ms
     iterations.....................: 400     9.868077/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters
reactive/cf-with-async - Expand to View K6 Report

Spring Boot Async K6 reactive/cf-with-async Report

Testing 'reactive/cf-with-async' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/cf-with-async

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 41 kB   1.0 kB/s
     group_duration.................: avg=202.35ms min=201.58ms med=202.22ms max=205.59ms p(90)=202.93ms p(95)=203.05ms
     http_req_blocked...............: avg=8.77µs   min=2µs      med=3µs      max=588µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=2.08µs   min=0s       med=0s       max=232µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.24ms min=201.52ms med=202.11ms max=204.72ms p(90)=202.84ms p(95)=202.92ms
       { expected_response:true }...: avg=202.24ms min=201.52ms med=202.11ms max=204.72ms p(90)=202.84ms p(95)=202.92ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=52.52µs  min=25µs     med=49µs     max=174µs    p(90)=74µs     p(95)=87µs    
     http_req_sending...............: avg=14.2µs   min=5µs      med=12µs     max=139µs    p(90)=18.1µs   p(95)=22µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.18ms min=201.47ms med=202.05ms max=204.48ms p(90)=202.76ms p(95)=202.86ms
     http_reqs......................: 400     9.881561/s
     iteration_duration.............: avg=202.37ms min=201.59ms med=202.25ms max=205.72ms p(90)=202.95ms p(95)=203.09ms
     iterations.....................: 400     9.881561/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters

Virtual Threads

Expand to View Vegeta Report

Spring Boot Virtual Threads Vegeta Plot

=======================================
./results_async_cf-clean.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.10
Duration      [total, attack, wait]             10.183s, 9.98s, 202.653ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.826ms, 203.533ms, 203.148ms, 203.918ms, 204.543ms, 216.014ms, 236.082ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_async_cf-with-async.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.11
Duration      [total, attack, wait]             10.182s, 9.98s, 202.045ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.574ms, 202.822ms, 202.69ms, 203.359ms, 203.566ms, 204.948ms, 226.888ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_async_cf.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  21   4.20%   ###
[300ms,  500ms]  31   6.20%   ####
[500ms,  1s]     84   16.80%  ############
[1s,     2s]     175  35.00%  ##########################
[2s,     3s]     127  25.40%  ###################
[3s,     5s]     3    0.60%
[5s,     +Inf]   59   11.80%  ########
Requests      [total, rate, throughput]         500, 50.10, 30.36
Duration      [total, attack, wait]             14.527s, 9.98s, 4.547s
Latencies     [min, mean, 50, 90, 95, 99, max]  202.983ms, 1.907s, 1.66s, 5s, 5s, 5.001s, 5.001s
Bytes In      [total, mean]                     5733, 11.47
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           88.20%
Status Codes  [code:count]                      0:59  200:441
Error Set:
Get "http://localhost:8080/async/cf": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_non-async_cf-get.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  17   3.40%   ##
[300ms,  500ms]  34   6.80%   #####
[500ms,  1s]     84   16.80%  ############
[1s,     2s]     175  35.00%  ##########################
[2s,     3s]     129  25.80%  ###################
[3s,     5s]     3    0.60%
[5s,     +Inf]   58   11.60%  ########
Requests      [total, rate, throughput]         500, 50.10, 30.45
Duration      [total, attack, wait]             14.514s, 9.98s, 4.535s
Latencies     [min, mean, 50, 90, 95, 99, max]  203.624ms, 1.914s, 1.659s, 5s, 5s, 5.001s, 5.001s
Bytes In      [total, mean]                     5746, 11.49
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           88.40%
Status Codes  [code:count]                      0:58  200:442
Error Set:
Get "http://localhost:8080/non-async/cf-get": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_non-async_clean.bin
Bucket           #    %       Histogram
[0s,     100ms]  7    1.40%   #
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  425  85.00%  ###############################################################
[300ms,  500ms]  12   2.40%   #
[500ms,  1s]     26   5.20%   ###
[1s,     2s]     30   6.00%   ####
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 48.41
Duration      [total, attack, wait]             10.184s, 9.98s, 204.029ms
Latencies     [min, mean, 50, 90, 95, 99, max]  775.638µs, 302.812ms, 203.747ms, 593.007ms, 1.104s, 1.484s, 1.576s
Bytes In      [total, mean]                     6409, 12.82
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           98.60%
Status Codes  [code:count]                      0:7  200:493
Error Set:
Get "http://localhost:8080/non-async/clean": read tcp [::1]:64121->[::1]:8080: read: connection reset by peer
Get "http://localhost:8080/non-async/clean": read tcp 127.0.0.1:64123->127.0.0.1:8080: read: connection reset by peer
Get "http://localhost:8080/non-async/clean": read tcp [::1]:64126->[::1]:8080: read: connection reset by peer
Get "http://localhost:8080/non-async/clean": read tcp [::1]:64128->[::1]:8080: read: connection reset by peer
Get "http://localhost:8080/non-async/clean": read tcp 127.0.0.1:64130->127.0.0.1:8080: read: connection reset by peer
Get "http://localhost:8080/non-async/clean": read tcp 127.0.0.1:64131->127.0.0.1:8080: read: connection reset by peer
Get "http://localhost:8080/non-async/clean": read tcp 127.0.0.1:64134->127.0.0.1:8080: read: connection reset by peer
=======================================
./results_reactive_cf-get.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  21   4.20%   ###
[300ms,  500ms]  32   6.40%   ####
[500ms,  1s]     84   16.80%  ############
[1s,     2s]     171  34.20%  #########################
[2s,     3s]     130  26.00%  ###################
[3s,     5s]     4    0.80%
[5s,     +Inf]   58   11.60%  ########
Requests      [total, rate, throughput]         500, 50.10, 30.45
Duration      [total, attack, wait]             14.514s, 9.98s, 4.534s
Latencies     [min, mean, 50, 90, 95, 99, max]  203.626ms, 1.905s, 1.654s, 5s, 5s, 5.001s, 5.002s
Bytes In      [total, mean]                     5746, 11.49
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           88.40%
Status Codes  [code:count]                      0:58  200:442
Error Set:
Get "http://localhost:8080/reactive/cf-get": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_reactive_cf-with-async.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.10
Duration      [total, attack, wait]             10.183s, 9.98s, 202.578ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.328ms, 202.675ms, 202.499ms, 203.034ms, 203.444ms, 207.912ms, 227.926ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
=======================================
./results_reactive_cf.bin
Bucket           #    %       Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  14   2.80%   ##
[300ms,  500ms]  39   7.80%   #####
[500ms,  1s]     84   16.80%  ############
[1s,     2s]     172  34.40%  #########################
[2s,     3s]     130  26.00%  ###################
[3s,     5s]     3    0.60%
[5s,     +Inf]   58   11.60%  ########
Requests      [total, rate, throughput]         500, 50.10, 30.45
Duration      [total, attack, wait]             14.513s, 9.98s, 4.534s
Latencies     [min, mean, 50, 90, 95, 99, max]  203.048ms, 1.914s, 1.66s, 5s, 5s, 5.001s, 5.01s
Bytes In      [total, mean]                     5746, 11.49
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           88.40%
Status Codes  [code:count]                      0:58  200:442
Error Set:
Get "http://localhost:8080/reactive/cf": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
=======================================
./results_reactive_clean.bin
Bucket           #    %        Histogram
[0s,     100ms]  0    0.00%
[100ms,  200ms]  0    0.00%
[200ms,  300ms]  500  100.00%  ###########################################################################
[300ms,  500ms]  0    0.00%
[500ms,  1s]     0    0.00%
[1s,     2s]     0    0.00%
[2s,     3s]     0    0.00%
[3s,     5s]     0    0.00%
[5s,     +Inf]   0    0.00%
Requests      [total, rate, throughput]         500, 50.10, 49.10
Duration      [total, attack, wait]             10.183s, 9.98s, 202.971ms
Latencies     [min, mean, 50, 90, 95, 99, max]  201.617ms, 202.8ms, 202.636ms, 203.267ms, 203.531ms, 206.05ms, 235.856ms
Bytes In      [total, mean]                     6500, 13.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:500
Error Set:
non-async/clean - Expand to View K6 Report

Spring Boot Virtual Threads K6 non-async/clean Report

Testing 'non-async/clean' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ non-async/clean

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   939 B/s
     group_duration.................: avg=202.2ms  min=201.6ms  med=202.07ms max=204.35ms p(90)=202.7ms  p(95)=202.88ms
     http_req_blocked...............: avg=7.72µs   min=2µs      med=4µs      max=487µs    p(90)=5µs      p(95)=7µs     
     http_req_connecting............: avg=1.79µs   min=0s       med=0s       max=205µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.09ms min=201.49ms med=201.97ms max=203.58ms p(90)=202.56ms p(95)=202.73ms
       { expected_response:true }...: avg=202.09ms min=201.49ms med=201.97ms max=203.58ms p(90)=202.56ms p(95)=202.73ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=56.99µs  min=26µs     med=51µs     max=365µs    p(90)=75.1µs   p(95)=94µs    
     http_req_sending...............: avg=14.82µs  min=6µs      med=12µs     max=266µs    p(90)=18µs     p(95)=22µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.01ms min=201.44ms med=201.9ms  max=203.41ms p(90)=202.5ms  p(95)=202.65ms
     http_reqs......................: 400     9.888928/s
     iteration_duration.............: avg=202.23ms min=201.62ms med=202.09ms max=204.5ms  p(90)=202.72ms p(95)=202.93ms
     iterations.....................: 400     9.888928/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.4s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.4s/1m0s  400/400 shared iters
non-async/cf-get - Expand to View K6 Report

Spring Boot Virtual Threads K6 non-async/cf-get Report

Testing 'non-async/cf-get' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ non-async/cf-get

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   949 B/s
     group_duration.................: avg=202.36ms min=201.26ms med=202.07ms max=236.64ms p(90)=202.71ms p(95)=202.92ms
     http_req_blocked...............: avg=7.56µs   min=2µs      med=4µs      max=456µs    p(90)=6µs      p(95)=7.04µs  
     http_req_connecting............: avg=1.68µs   min=0s       med=0s       max=195µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.25ms min=201.16ms med=201.97ms max=236.56ms p(90)=202.6ms  p(95)=202.71ms
       { expected_response:true }...: avg=202.25ms min=201.16ms med=201.97ms max=236.56ms p(90)=202.6ms  p(95)=202.71ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=52.08µs  min=25µs     med=50µs     max=175µs    p(90)=67µs     p(95)=78µs    
     http_req_sending...............: avg=13.58µs  min=6µs      med=12µs     max=74µs     p(90)=18µs     p(95)=22µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.18ms min=201.11ms med=201.9ms  max=236.51ms p(90)=202.53ms p(95)=202.64ms
     http_reqs......................: 400     9.881245/s
     iteration_duration.............: avg=202.38ms min=201.27ms med=202.09ms max=236.66ms p(90)=202.74ms p(95)=202.94ms
     iterations.....................: 400     9.881245/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters
async/cf-clean - Expand to View K6 Report

Spring Boot Virtual Threads K6 async/cf-clean Report

Testing 'async/cf-clean' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ async/cf-clean

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   930 B/s
     group_duration.................: avg=202.18ms min=201.44ms med=202.09ms max=206.3ms  p(90)=202.65ms p(95)=202.81ms
     http_req_blocked...............: avg=10.07µs  min=2µs      med=4µs      max=951µs    p(90)=5µs      p(95)=8µs     
     http_req_connecting............: avg=1.87µs   min=0s       med=0s       max=193µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.07ms min=201.35ms med=201.99ms max=204.94ms p(90)=202.55ms p(95)=202.7ms 
       { expected_response:true }...: avg=202.07ms min=201.35ms med=201.99ms max=204.94ms p(90)=202.55ms p(95)=202.7ms 
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=51.91µs  min=26µs     med=50µs     max=179µs    p(90)=68µs     p(95)=77µs    
     http_req_sending...............: avg=12.92µs  min=7µs      med=11µs     max=77µs     p(90)=17µs     p(95)=21µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202ms    min=201.29ms med=201.93ms max=204.68ms p(90)=202.48ms p(95)=202.64ms
     http_reqs......................: 400     9.889956/s
     iteration_duration.............: avg=202.2ms  min=201.46ms med=202.11ms max=206.43ms p(90)=202.68ms p(95)=202.86ms
     iterations.....................: 400     9.889956/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.4s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.4s/1m0s  400/400 shared iters
async/cf - Expand to View K6 Report

Spring Boot Virtual Threads K6 async/cf Report

Testing 'async/cf' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ async/cf

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 35 kB   870 B/s
     group_duration.................: avg=202.26ms min=201.42ms med=202.11ms max=207.2ms  p(90)=202.81ms p(95)=203.01ms
     http_req_blocked...............: avg=8.09µs   min=2µs      med=4µs      max=599µs    p(90)=5µs      p(95)=7µs     
     http_req_connecting............: avg=2.07µs   min=0s       med=0s       max=281µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.15ms min=201.35ms med=202.01ms max=207.1ms  p(90)=202.69ms p(95)=202.85ms
       { expected_response:true }...: avg=202.15ms min=201.35ms med=202.01ms max=207.1ms  p(90)=202.69ms p(95)=202.85ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=53.16µs  min=22µs     med=48.5µs   max=160µs    p(90)=73µs     p(95)=89.04µs 
     http_req_sending...............: avg=15.99µs  min=7µs      med=12µs     max=443µs    p(90)=20µs     p(95)=23.14µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.08ms min=201.32ms med=201.95ms max=206.93ms p(90)=202.59ms p(95)=202.77ms
     http_reqs......................: 400     9.886151/s
     iteration_duration.............: avg=202.28ms min=201.43ms med=202.13ms max=207.21ms p(90)=202.83ms p(95)=203.04ms
     iterations.....................: 400     9.886151/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters
async/cf-with-async - Expand to View K6 Report

Spring Boot Virtual Threads K6 async/cf-with-async Report

Testing 'async/cf-with-async' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ async/cf-with-async

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 40 kB   978 B/s
     group_duration.................: avg=202.33ms min=201.46ms med=202.07ms max=225.1ms  p(90)=202.8ms  p(95)=202.95ms
     http_req_blocked...............: avg=9.31µs   min=2µs      med=4µs      max=798µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=2.48µs   min=0s       med=0s       max=297µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.22ms min=201.38ms med=201.98ms max=225ms    p(90)=202.68ms p(95)=202.83ms
       { expected_response:true }...: avg=202.22ms min=201.38ms med=201.98ms max=225ms    p(90)=202.68ms p(95)=202.83ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=52.78µs  min=27µs     med=49µs     max=147µs    p(90)=69µs     p(95)=80.04µs 
     http_req_sending...............: avg=13.04µs  min=6µs      med=11µs     max=102µs    p(90)=18µs     p(95)=21µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.16ms min=201.33ms med=201.92ms max=224.92ms p(90)=202.62ms p(95)=202.75ms
     http_reqs......................: 400     9.882503/s
     iteration_duration.............: avg=202.36ms min=201.48ms med=202.09ms max=225.12ms p(90)=202.83ms p(95)=202.98ms
     iterations.....................: 400     9.882503/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters
reactive/clean - Expand to View K6 Report

Spring Boot Virtual Threads K6 reactive/clean Report

Testing 'reactive/clean' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/clean

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   929 B/s
     group_duration.................: avg=202.43ms min=201.51ms med=202.1ms  max=224.15ms p(90)=202.71ms p(95)=203.01ms
     http_req_blocked...............: avg=8.04µs   min=2µs      med=4µs      max=576µs    p(90)=5µs      p(95)=5µs     
     http_req_connecting............: avg=1.96µs   min=0s       med=0s       max=207µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.33ms min=201.42ms med=201.99ms max=224.06ms p(90)=202.6ms  p(95)=202.85ms
       { expected_response:true }...: avg=202.33ms min=201.42ms med=201.99ms max=224.06ms p(90)=202.6ms  p(95)=202.85ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=53.2µs   min=25µs     med=50µs     max=184µs    p(90)=69.1µs   p(95)=81.09µs 
     http_req_sending...............: avg=14.48µs  min=5µs      med=12µs     max=340µs    p(90)=17.1µs   p(95)=21µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.26ms min=201.36ms med=201.92ms max=223.99ms p(90)=202.53ms p(95)=202.78ms
     http_reqs......................: 400     9.877628/s
     iteration_duration.............: avg=202.46ms min=201.53ms med=202.11ms max=224.16ms p(90)=202.74ms p(95)=203.04ms
     iterations.....................: 400     9.877628/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters
reactive/cf-get - Expand to View K6 Report

Spring Boot Virtual Threads K6 reactive/cf-get Report

Testing 'reactive/cf-get' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/cf-get

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 38 kB   940 B/s
     group_duration.................: avg=202.2ms  min=201.41ms med=202.08ms max=206.2ms  p(90)=202.67ms p(95)=202.9ms 
     http_req_blocked...............: avg=10.2µs   min=2µs      med=4µs      max=900µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=2.34µs   min=0s       med=0s       max=263µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.09ms min=201.31ms med=201.99ms max=204.99ms p(90)=202.57ms p(95)=202.77ms
       { expected_response:true }...: avg=202.09ms min=201.31ms med=201.99ms max=204.99ms p(90)=202.57ms p(95)=202.77ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=51.32µs  min=26µs     med=49µs     max=142µs    p(90)=67µs     p(95)=75.09µs 
     http_req_sending...............: avg=13.69µs  min=6µs      med=12µs     max=161µs    p(90)=17µs     p(95)=20µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.02ms min=201.24ms med=201.94ms max=204.75ms p(90)=202.5ms  p(95)=202.7ms 
     http_reqs......................: 400     9.88923/s
     iteration_duration.............: avg=202.22ms min=201.43ms med=202.1ms  max=206.32ms p(90)=202.7ms  p(95)=202.93ms
     iterations.....................: 400     9.88923/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.4s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.4s/1m0s  400/400 shared iters
reactive/cf - Expand to View K6 Report

Spring Boot Virtual Threads K6 reactive/cf Report

Testing 'reactive/cf' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/cf

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 36 kB   900 B/s
     group_duration.................: avg=202.16ms min=201.1ms  med=202.02ms max=209.74ms p(90)=202.58ms p(95)=202.83ms
     http_req_blocked...............: avg=7.4µs    min=2µs      med=3µs      max=511µs    p(90)=5µs      p(95)=6µs     
     http_req_connecting............: avg=1.73µs   min=0s       med=0s       max=183µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.06ms min=201.02ms med=201.93ms max=209.66ms p(90)=202.47ms p(95)=202.71ms
       { expected_response:true }...: avg=202.06ms min=201.02ms med=201.93ms max=209.66ms p(90)=202.47ms p(95)=202.71ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=50.4µs   min=25µs     med=48µs     max=188µs    p(90)=66µs     p(95)=75.04µs 
     http_req_sending...............: avg=13.36µs  min=6µs      med=12µs     max=124µs    p(90)=17µs     p(95)=20µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202ms    min=200.97ms med=201.86ms max=209.6ms  p(90)=202.41ms p(95)=202.64ms
     http_reqs......................: 400     9.890816/s
     iteration_duration.............: avg=202.19ms min=201.12ms med=202.04ms max=209.77ms p(90)=202.61ms p(95)=202.88ms
     iterations.....................: 400     9.890816/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.4s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.4s/1m0s  400/400 shared iters
reactive/cf-with-async - Expand to View K6 Report

Spring Boot Virtual Threads K6 reactive/cf-with-async Report

Testing 'reactive/cf-with-async' ...

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6-tests-template.js
        output: dashboard http://127.0.0.1:5665

     scenarios: (100.00%) 1 scenario, 2 max VUs, 1m30s max duration (incl. graceful stop):
              * default: 400 iterations shared among 2 VUs (maxDuration: 1m0s, gracefulStop: 30s)


     █ reactive/cf-with-async

       ✓ status is 200

     checks.........................: 100.00% 400 out of 400
     data_received..................: 51 kB   1.3 kB/s
     data_sent......................: 41 kB   1.0 kB/s
     group_duration.................: avg=202.26ms min=201.32ms med=202.13ms max=206.16ms p(90)=202.75ms p(95)=203.02ms
     http_req_blocked...............: avg=8.11µs   min=2µs      med=4µs      max=607µs    p(90)=5µs      p(95)=7µs     
     http_req_connecting............: avg=1.78µs   min=0s       med=0s       max=201µs    p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=202.15ms min=201.23ms med=202.03ms max=206.03ms p(90)=202.65ms p(95)=202.91ms
       { expected_response:true }...: avg=202.15ms min=201.23ms med=202.03ms max=206.03ms p(90)=202.65ms p(95)=202.91ms
     http_req_failed................: 0.00%   0 out of 400
     http_req_receiving.............: avg=53.16µs  min=25µs     med=49µs     max=150µs    p(90)=71.1µs   p(95)=88µs    
     http_req_sending...............: avg=13.45µs  min=6µs      med=12µs     max=104µs    p(90)=18µs     p(95)=22µs    
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=202.08ms min=201.16ms med=201.97ms max=205.97ms p(90)=202.58ms p(95)=202.83ms
     http_reqs......................: 400     9.886296/s
     iteration_duration.............: avg=202.28ms min=201.34ms med=202.15ms max=206.19ms p(90)=202.77ms p(95)=203.04ms
     iterations.....................: 400     9.886296/s
     vus............................: 2       min=2          max=2
     vus_max........................: 2       min=2          max=2


running (0m40.5s), 0/2 VUs, 400 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs  0m40.5s/1m0s  400/400 shared iters

About

A comparison of performance strategies between async, reactive, and local threads, using native and non-native Spring Boot, Quarkus and vanilla JAX-RS microservices.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published