Skip to content

[roda] Mark as production#613

Merged
MDA2AV merged 3 commits intoMDA2AV:mainfrom
p8:roda/production
Apr 23, 2026
Merged

[roda] Mark as production#613
MDA2AV merged 3 commits intoMDA2AV:mainfrom
p8:roda/production

Conversation

@p8
Copy link
Copy Markdown
Contributor

@p8 p8 commented Apr 23, 2026

Roda uses standard framework configuration.

@Kaliumhexacyanoferrat
Copy link
Copy Markdown
Collaborator

Kaliumhexacyanoferrat commented Apr 23, 2026

The compressed JSON test is implemented in the handler:

      if accept_encodings = r.headers['Accept-Encoding']
        type = accept_encodings.split(',').map(&:strip)
        if type.include? 'gzip'
          sio = StringIO.new
          gz = Zlib::GzipWriter.new(sio, 1)
          gz.write(result)
          gz.close
          response[RodaResponseHeaders::CONTENT_ENCODING] = 'gzip'
          result = sio.string
        end
      end

The rules state

Must use the framework standard JSON serialization and the framework or engine's built-in response compression (middleware, filter, or equivalent). No pre-compressed caches, no bypassing the response pipeline.

There are :gzip and :br plugins which should be able to dynamically compress responses, as far as I understand the documentation.

@p8 p8 force-pushed the roda/production branch from 35b214b to 2a4770a Compare April 23, 2026 18:12
Roda uses standard framework configuration.
Use Rack::Deflater middleware for gzip.
@p8 p8 force-pushed the roda/production branch from 2a4770a to 2b35869 Compare April 23, 2026 19:44
@p8
Copy link
Copy Markdown
Contributor Author

p8 commented Apr 23, 2026

/benchmark -f roda -t json-comp

@github-actions
Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions
Copy link
Copy Markdown
Contributor

🚀 Benchmark run triggered for roda (test: json-comp). Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: roda | Test: json-comp

Test Conn RPS CPU Mem Δ RPS Δ Mem
json-comp 512 151,861 6422.1% 3.9GiB -13.0% -11.4%
json-comp 4096 169,346 6458.6% 4.4GiB -6.7% ~0%
json-comp 16384 166,251 6501.8% 4.3GiB -7.1% -2.3%
Full log

  759305 requests in 5.00s, 759305 responses
  Throughput: 151.78K req/s
  Bandwidth:  140.10MB/s
  Status codes: 2xx=759305, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 759303 / 759305 responses (100.0%)
  Reconnects: 30352
  Per-template: 108327,108222,108389,108624,108663,108541,108537
  Per-template-ok: 108327,108222,108389,108624,108663,108541,108537
[info] CPU 6422.1% | Mem 3.9GiB

=== Best: 151861 req/s (CPU: 6422.1%, Mem: 3.9GiB) ===
[info] input BW: 11.15MB/s (avg template: 77 bytes)
[info] saved results/json-comp/512/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / json-comp / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   22.06ms   20.90ms   32.80ms   57.30ms   258.30ms

  810342 requests in 5.00s, 807827 responses
  Throughput: 161.50K req/s
  Bandwidth:  148.78MB/s
  Status codes: 2xx=807827, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 807826 / 807827 responses (100.0%)
  Reconnects: 30385
  Per-template: 115664,115657,115682,116013,115313,114818,114679
  Per-template-ok: 115664,115657,115682,116013,115313,114818,114679
[info] CPU 6461.3% | Mem 4.0GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.87ms   21.90ms   30.30ms   41.20ms   220.90ms

  843282 requests in 5.00s, 841224 responses
  Throughput: 168.12K req/s
  Bandwidth:  155.05MB/s
  Status codes: 2xx=841224, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 841219 / 841224 responses (100.0%)
  Reconnects: 31740
  Per-template: 120423,120261,120354,119978,120065,120058,120080
  Per-template-ok: 120423,120261,120354,119978,120065,120058,120080
[info] CPU 6509.0% | Mem 4.2GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.73ms   21.50ms   30.40ms   40.70ms   222.30ms

  848865 requests in 5.00s, 846730 responses
  Throughput: 169.22K req/s
  Bandwidth:  156.11MB/s
  Status codes: 2xx=846730, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 846729 / 846730 responses (100.0%)
  Reconnects: 32005
  Per-template: 121377,120862,121126,120432,120811,121067,121054
  Per-template-ok: 121377,120862,121126,120432,120811,121067,121054
[info] CPU 6458.6% | Mem 4.4GiB

=== Best: 169346 req/s (CPU: 6458.6%, Mem: 4.4GiB) ===
[info] input BW: 12.44MB/s (avg template: 77 bytes)
[info] saved results/json-comp/4096/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / json-comp / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   52.19ms   42.60ms   61.00ms   141.30ms    3.42s

  804219 requests in 5.00s, 787868 responses
  Throughput: 157.46K req/s
  Bandwidth:  145.36MB/s
  Status codes: 2xx=787868, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 787868 / 787868 responses (100.0%)
  Reconnects: 26618
  Per-template: 112546,112073,112402,112737,112671,112748,112691
  Per-template-ok: 112546,112073,112402,112737,112671,112748,112691
[info] CPU 6241.8% | Mem 3.9GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   58.35ms   49.60ms   69.60ms   126.90ms    3.40s

  847605 requests in 5.00s, 831256 responses
  Throughput: 166.13K req/s
  Bandwidth:  153.05MB/s
  Status codes: 2xx=831256, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 831256 / 831256 responses (100.0%)
  Reconnects: 27901
  Per-template: 118415,118671,120110,119565,118894,117618,117983
  Per-template-ok: 118415,118671,120110,119565,118894,117618,117983
[info] CPU 6501.8% | Mem 4.3GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   62.13ms   50.50ms   77.30ms   179.30ms    3.43s

  827897 requests in 5.00s, 811525 responses
  Throughput: 162.19K req/s
  Bandwidth:  149.61MB/s
  Status codes: 2xx=811525, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 811525 / 811525 responses (100.0%)
  Reconnects: 27124
  Per-template: 115296,116231,116270,116365,116144,115659,115560
  Per-template-ok: 115296,116231,116270,116365,116144,115659,115560
[info] CPU 6239.7% | Mem 4.4GiB

=== Best: 166251 req/s (CPU: 6501.8%, Mem: 4.3GiB) ===
[info] input BW: 12.21MB/s (avg template: 77 bytes)
[info] saved results/json-comp/16384/roda.json
httparena-bench-roda
httparena-bench-roda
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@MDA2AV
Copy link
Copy Markdown
Owner

MDA2AV commented Apr 23, 2026

/benchmark -f roda -t json-comp --save

@github-actions
Copy link
Copy Markdown
Contributor

👋 /benchmark request received. A collaborator will review and approve the run.

@github-actions
Copy link
Copy Markdown
Contributor

🚀 Benchmark run triggered for roda (test: json-comp) with --save. Results will be posted here when done.

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: roda | Test: json-comp

Test Conn RPS CPU Mem Δ RPS Δ Mem
json-comp 512 150,922 6441.4% 3.7GiB -13.6% -15.9%
json-comp 4096 169,340 6516.2% 4.3GiB -6.7% -2.3%
json-comp 16384 165,835 6512.1% 4.2GiB -7.3% -4.5%
Full log

  750691 requests in 5.00s, 750692 responses
  Throughput: 150.07K req/s
  Bandwidth:  138.45MB/s
  Status codes: 2xx=750692, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 750690 / 750692 responses (100.0%)
  Reconnects: 30001
  Per-template: 107140,107324,107418,107240,107099,107252,107217
  Per-template-ok: 107140,107324,107418,107240,107099,107252,107217
[info] CPU 6424.0% | Mem 3.9GiB

=== Best: 150922 req/s (CPU: 6441.4%, Mem: 3.7GiB) ===
[info] input BW: 11.08MB/s (avg template: 77 bytes)
[info] saved results/json-comp/512/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / json-comp / 4096c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.89ms   22.00ms   29.70ms   41.50ms   248.50ms

  823903 requests in 5.00s, 821116 responses
  Throughput: 164.10K req/s
  Bandwidth:  151.25MB/s
  Status codes: 2xx=821116, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 821116 / 821116 responses (100.0%)
  Reconnects: 30957
  Per-template: 117581,117641,117743,117410,116730,116834,117177
  Per-template-ok: 117581,117641,117743,117410,116730,116834,117177
[info] CPU 6469.9% | Mem 4.0GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.57ms   21.70ms   29.70ms   39.90ms   221.90ms

  848879 requests in 5.00s, 846700 responses
  Throughput: 169.22K req/s
  Bandwidth:  156.08MB/s
  Status codes: 2xx=846700, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 846698 / 846700 responses (100.0%)
  Reconnects: 31976
  Per-template: 121268,121520,120832,120549,120311,121003,121215
  Per-template-ok: 121268,121520,120832,120549,120311,121003,121215
[info] CPU 6516.2% | Mem 4.3GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     4096 (64/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   21.91ms   21.80ms   30.70ms   42.70ms   223.90ms

  839996 requests in 5.00s, 836320 responses
  Throughput: 167.17K req/s
  Bandwidth:  154.12MB/s
  Status codes: 2xx=836320, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 836320 / 836320 responses (100.0%)
  Reconnects: 31562
  Per-template: 120225,120140,119211,118956,118802,118962,120024
  Per-template-ok: 120225,120140,119211,118956,118802,118962,120024
[info] CPU 6467.5% | Mem 4.4GiB

=== Best: 169340 req/s (CPU: 6516.2%, Mem: 4.3GiB) ===
[info] input BW: 12.44MB/s (avg template: 77 bytes)
[info] saved results/json-comp/4096/roda.json
httparena-bench-roda
httparena-bench-roda

==============================================
=== roda / json-comp / 16384c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   55.42ms   45.90ms   64.20ms   165.80ms    3.40s

  792740 requests in 5.00s, 776390 responses
  Throughput: 155.17K req/s
  Bandwidth:  142.91MB/s
  Status codes: 2xx=776390, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 776390 / 776390 responses (100.0%)
  Reconnects: 26417
  Per-template: 111603,111393,111761,110449,110201,110302,110681
  Per-template-ok: 111603,111393,111761,110449,110201,110302,110681
[info] CPU 6191.1% | Mem 3.9GiB

[run 2/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   57.73ms   49.40ms   68.40ms   127.70ms    3.40s

  845539 requests in 5.00s, 829179 responses
  Throughput: 165.72K req/s
  Bandwidth:  152.85MB/s
  Status codes: 2xx=829179, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 829179 / 829179 responses (100.0%)
  Reconnects: 27750
  Per-template: 118675,118362,118982,118300,117860,118627,118373
  Per-template-ok: 118675,118362,118982,118300,117860,118627,118373
[info] CPU 6512.1% | Mem 4.2GiB

[run 3/3]
gcannon v0.5.2
  Target:    localhost:8080/
  Threads:   64
  Conns:     16384 (256/thread)
  Pipeline:  1
  Req/conn:  25
  Templates: 7
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   78.66ms   73.90ms   104.90ms   295.00ms    1.81s

  835825 requests in 5.00s, 819441 responses
  Throughput: 163.74K req/s
  Bandwidth:  150.70MB/s
  Status codes: 2xx=819441, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 819441 / 819441 responses (100.0%)
  Reconnects: 24757
  Per-template: 117269,118595,118130,116576,116032,116680,116159
  Per-template-ok: 117269,118595,118130,116576,116032,116680,116159
[info] CPU 6255.0% | Mem 4.4GiB

=== Best: 165835 req/s (CPU: 6512.1%, Mem: 4.2GiB) ===
[info] input BW: 12.18MB/s (avg template: 77 bytes)
[info] saved results/json-comp/16384/roda.json
httparena-bench-roda
httparena-bench-roda
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-16384.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-4096.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/json-comp-512.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
httparena-postgres
[info] restoring loopback MTU to 65536
[info] restoring CPU governor → powersave

@MDA2AV MDA2AV merged commit 73f21bf into MDA2AV:main Apr 23, 2026
4 checks passed
@p8 p8 deleted the roda/production branch April 27, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants