Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions frameworks/roadrunner/.tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
erlang 29.0
2 changes: 1 addition & 1 deletion frameworks/roadrunner/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ RUN rebar3 as prod release
FROM alpine:3.23
RUN apk add --no-cache libstdc++ ncurses-libs openssl
COPY --from=build /src/_build/prod/rel/roadrunner_httparena /app
EXPOSE 8080 8081 8082 8443
EXPOSE 8080 8081 8082 8443/tcp 8443/udp
CMD ["/app/bin/roadrunner_httparena", "foreground"]
6 changes: 3 additions & 3 deletions frameworks/roadrunner/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# roadrunner

[Roadrunner](https://github.com/arizona-framework/roadrunner) is the pure-Erlang HTTP/1.1 + HTTP/2 + WebSocket server from the Arizona framework. This entry packages a minimal OTP release wrapping roadrunner with the HttpArena endpoint contract.
[Roadrunner](https://github.com/arizona-framework/roadrunner) is the pure-Erlang HTTP/1.1 + HTTP/2 + HTTP/3 + WebSocket server from the Arizona framework. This entry packages a minimal OTP release wrapping roadrunner with the HttpArena endpoint contract.

## Profiles

Covered (19 of 28 profiles):
Covered (21 of 28 profiles):

- `baseline`, `pipelined`, `limited-conn`
- `json`, `json-comp`, `json-tls`
Expand All @@ -13,11 +13,11 @@ Covered (19 of 28 profiles):
- `static`, `static-h2`
- `fortunes`, `crud`
- `baseline-h2`, `baseline-h2c`, `json-h2c`
- `baseline-h3`, `static-h3`
- `echo-ws`, `echo-ws-pipeline`

Deferred (tracked under [HttpArena coverage gaps](https://github.com/arizona-framework/roadrunner/blob/main/docs/roadmap.md) in the roadrunner roadmap):

- `baseline-h3`, `static-h3`: roadrunner has no HTTP/3 stack yet.
- `unary-grpc`, `stream-grpc`, TLS variants: no gRPC stack.
- `gateway-64`, `gateway-h3`, `production-stack`: reverse-proxy multi-container scenarios; out of scope for the single-framework entry.

Expand Down
4 changes: 3 additions & 1 deletion frameworks/roadrunner/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"language": "Erlang",
"type": "production",
"engine": "roadrunner",
"description": "Roadrunner: pure-Erlang HTTP/1.1 + HTTP/2 + WebSocket server from the Arizona framework.",
"description": "Roadrunner: pure-Erlang HTTP/1.1 + HTTP/2 + HTTP/3 + WebSocket server from the Arizona framework.",
"repo": "https://github.com/arizona-framework/roadrunner",
"enabled": true,
"tests": [
Expand All @@ -24,6 +24,8 @@
"static-h2",
"baseline-h2c",
"json-h2c",
"baseline-h3",
"static-h3",
"echo-ws",
"echo-ws-pipeline"
],
Expand Down
8 changes: 6 additions & 2 deletions frameworks/roadrunner/rebar.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
{minimum_otp_vsn, "29"}.

{deps, [
{roadrunner, "0.1.0"},
{roadrunner, "0.2.3"},
{epgsql, "4.8.0"},
{pooler, "1.6.0"}
]}.

{relx, [
{release, {roadrunner_httparena, "0.1.0"},
[roadrunner_httparena, roadrunner]},
%% `quic` is an optional roadrunner runtime dep (started on demand
%% for HTTP/3, not in roadrunner's `applications`), so a release
%% using http3 must include it explicitly or the h3 listener fails
%% with `{quic, "no such file or directory"}` at boot.
[roadrunner_httparena, roadrunner, quic]},
{sys_config, "./config/sys.config"},
{dev_mode, false},
{include_erts, true},
Expand Down
9 changes: 6 additions & 3 deletions frameworks/roadrunner/rebar.lock
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
{"1.2.0",
[{<<"epgsql">>,{pkg,<<"epgsql">>,<<"4.8.0">>},0},
{<<"pooler">>,{pkg,<<"pooler">>,<<"1.6.0">>},0},
{<<"roadrunner">>,{pkg,<<"roadrunner">>,<<"0.1.0">>},0},
{<<"quic">>,{pkg,<<"quic">>,<<"1.4.3">>},1},
{<<"roadrunner">>,{pkg,<<"roadrunner">>,<<"0.2.3">>},0},
{<<"telemetry">>,{pkg,<<"telemetry">>,<<"1.4.2">>},1}]}.
[
{pkg_hash,[
{<<"epgsql">>, <<"C491B141B8C37BCE7B67F2079F168F339BB374A7CF9A286CB3B40AD1CD3FABE5">>},
{<<"pooler">>, <<"F4F33C94AB3AB82565A2E31CEA9EFE4149A160651F3707A0A2669BC54AAF81C8">>},
{<<"roadrunner">>, <<"ECC4CA6CFE2ED65661D57DE8FF53986850F62F882AAF76829150F8ED00954249">>},
{<<"quic">>, <<"CCA828DB522AC67B638081D93562B463E84286C22655C3409C5746C302E177E5">>},
{<<"roadrunner">>, <<"2E8C89078229C8C1C6CE6C61535AA25796B19B8F6BC0F231822D90429F2F39FB">>},
{<<"telemetry">>, <<"A0CB522801DFFB1C49FE6E30561BADFFC7B6D0E180DB1300DF759FAA22062855">>}]},
{pkg_hash_ext,[
{<<"epgsql">>, <<"00E550006A62FB439FC7E879419443C889C34605E9B9DC406029D8BAA1AD79D8">>},
{<<"pooler">>, <<"748C988FD2928DE9577C882A49621863CAB57809E3E1A88A14C9D3B55C6AB877">>},
{<<"roadrunner">>, <<"1F393EBB706D61427F2C472A362030D45B0E85B59A680E6180154116C8BE4D6A">>},
{<<"quic">>, <<"A12FFEDC8AD8A41D303083C306DEA76141FAB3A54DF8DC0C5E5691FA40E8E619">>},
{<<"roadrunner">>, <<"0D92EB77420775D3CCBD5E8691FA72D1B0A7A88C114DAC84E37D57D31BFE74F9">>},
{<<"telemetry">>, <<"928F6495066506077862C0D1646609EED891A4326BEE3126BA54B60AF61FEBB1">>}]}
].
5 changes: 4 additions & 1 deletion frameworks/roadrunner/src/roadrunner_httparena_app.erl
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ start(_StartType, _StartArgs) ->
tls => TlsOpts,
%% Listener derives `alpn_preferred_protocols` from
%% this list — `h2` preferred, fall back to `http/1.1`.
protocols => [http2, http1],
%% `http3` co-serves over QUIC on UDP 8443 (same port
%% number) and auto-advertises `Alt-Svc: h3=":8443"` on
%% the h1/h2 responses. Serves baseline-h3 / static-h3.
protocols => [http2, http1, http3],
body_buffering => manual
});
skip ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ routes() ->
{~"/crud/items", ?MODULE, undefined},
{~"/crud/items/:id", ?MODULE, undefined},
{~"/ws", ?MODULE, undefined},
{~"/static/*path", roadrunner_static, #{dir => static_dir()}}
{~"/static/*path", roadrunner_static, #{dir => static_dir(), cache_ttl_ms => 1000}}
].

static_dir() ->
Expand Down
24 changes: 12 additions & 12 deletions site/data/api-16-1024.json
Original file line number Diff line number Diff line change
Expand Up @@ -802,28 +802,28 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 41782,
"avg_latency": "14.36ms",
"p99_latency": "97.80ms",
"cpu": "1518.0%",
"memory": "310MiB",
"rps": 45279,
"avg_latency": "16.06ms",
"p99_latency": "102.30ms",
"cpu": "1543.3%",
"memory": "349MiB",
"connections": 1024,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "211.60MB/s",
"input_bw": "2.35MB/s",
"reconnects": 357289,
"status_2xx": 626738,
"bandwidth": "229.31MB/s",
"input_bw": "2.55MB/s",
"reconnects": 240700,
"status_2xx": 679188,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
"tpl_baseline": 234217,
"tpl_json": 235747,
"tpl_baseline": 253791,
"tpl_json": 255613,
"tpl_db": 0,
"tpl_upload": 0,
"tpl_static": 0,
"tpl_async_db": 156774
"tpl_async_db": 169784
},
{
"framework": "roda",
Expand Down
24 changes: 12 additions & 12 deletions site/data/api-4-256.json
Original file line number Diff line number Diff line change
Expand Up @@ -802,28 +802,28 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 20211,
"avg_latency": "11.90ms",
"p99_latency": "54.70ms",
"cpu": "399.4%",
"memory": "167MiB",
"rps": 18246,
"avg_latency": "13.34ms",
"p99_latency": "60.40ms",
"cpu": "401.1%",
"memory": "163MiB",
"connections": 256,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "102.17MB/s",
"input_bw": "1.14MB/s",
"reconnects": 60618,
"status_2xx": 303168,
"bandwidth": "92.24MB/s",
"input_bw": "1.03MB/s",
"reconnects": 54719,
"status_2xx": 273702,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
"tpl_baseline": 113616,
"tpl_json": 113788,
"tpl_baseline": 102560,
"tpl_json": 102650,
"tpl_db": 0,
"tpl_upload": 0,
"tpl_static": 0,
"tpl_async_db": 75764
"tpl_async_db": 68492
},
{
"framework": "roda",
Expand Down
18 changes: 9 additions & 9 deletions site/data/async-db-1024.json
Original file line number Diff line number Diff line change
Expand Up @@ -636,19 +636,19 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 84434,
"avg_latency": "2.17ms",
"p99_latency": "23.10ms",
"cpu": "5223.1%",
"memory": "646MiB",
"rps": 84905,
"avg_latency": "2.16ms",
"p99_latency": "23.90ms",
"cpu": "5216.3%",
"memory": "629MiB",
"connections": 1024,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "323.86MB/s",
"input_bw": "5.64MB/s",
"reconnects": 418046,
"status_2xx": 844348,
"bandwidth": "325.18MB/s",
"input_bw": "5.67MB/s",
"reconnects": 406796,
"status_2xx": 849051,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
18 changes: 9 additions & 9 deletions site/data/baseline-4096.json
Original file line number Diff line number Diff line change
Expand Up @@ -949,19 +949,19 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 846968,
"avg_latency": "217us",
"p99_latency": "391us",
"cpu": "6217.2%",
"memory": "288MiB",
"rps": 687020,
"avg_latency": "263us",
"p99_latency": "959us",
"cpu": "5084.2%",
"memory": "307MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "113.86MB/s",
"input_bw": "65.43MB/s",
"reconnects": 128880,
"status_2xx": 4234844,
"bandwidth": "92.34MB/s",
"input_bw": "53.07MB/s",
"reconnects": 142406,
"status_2xx": 3435103,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
18 changes: 9 additions & 9 deletions site/data/baseline-512.json
Original file line number Diff line number Diff line change
Expand Up @@ -949,19 +949,19 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 833311,
"avg_latency": "193us",
"p99_latency": "399us",
"cpu": "6413.0%",
"memory": "280MiB",
"rps": 771470,
"avg_latency": "209us",
"p99_latency": "432us",
"cpu": "6098.9%",
"memory": "315MiB",
"connections": 512,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "112.02MB/s",
"input_bw": "64.37MB/s",
"reconnects": 129279,
"status_2xx": 4166556,
"bandwidth": "103.71MB/s",
"input_bw": "59.59MB/s",
"reconnects": 120430,
"status_2xx": 3857351,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
14 changes: 7 additions & 7 deletions site/data/baseline-h2-1024.json
Original file line number Diff line number Diff line change
Expand Up @@ -336,18 +336,18 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 492690,
"avg_latency": "29.90ms",
"p99_latency": "29.90ms",
"cpu": "6439.2%",
"memory": "555MiB",
"rps": 472506,
"avg_latency": "30.87ms",
"p99_latency": "30.87ms",
"cpu": "6229.1%",
"memory": "587MiB",
"connections": 1024,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "10.96MB/s",
"bandwidth": "11.43MB/s",
"reconnects": 0,
"status_2xx": 2497942,
"status_2xx": 2395610,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
14 changes: 7 additions & 7 deletions site/data/baseline-h2-256.json
Original file line number Diff line number Diff line change
Expand Up @@ -336,18 +336,18 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 483871,
"avg_latency": "30.44ms",
"p99_latency": "30.44ms",
"cpu": "6538.3%",
"memory": "504MiB",
"rps": 464149,
"avg_latency": "31.63ms",
"p99_latency": "31.63ms",
"cpu": "6401.6%",
"memory": "560MiB",
"connections": 256,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "10.70MB/s",
"bandwidth": "11.14MB/s",
"reconnects": 0,
"status_2xx": 2438712,
"status_2xx": 2334672,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
14 changes: 7 additions & 7 deletions site/data/baseline-h2c-1024.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,18 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 938636,
"avg_latency": "15.97ms",
"p99_latency": "15.97ms",
"cpu": "6530.3%",
"memory": "509MiB",
"rps": 887621,
"avg_latency": "16.49ms",
"p99_latency": "16.49ms",
"cpu": "6263.1%",
"memory": "583MiB",
"connections": 1024,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "20.92MB/s",
"bandwidth": "20.56MB/s",
"reconnects": 0,
"status_2xx": 4749501,
"status_2xx": 4482487,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
14 changes: 7 additions & 7 deletions site/data/baseline-h2c-256.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,18 @@
{
"framework": "roadrunner",
"language": "Erlang",
"rps": 922318,
"avg_latency": "16.38ms",
"p99_latency": "16.38ms",
"cpu": "6584.9%",
"memory": "579MiB",
"rps": 834328,
"avg_latency": "17.78ms",
"p99_latency": "17.78ms",
"cpu": "6297.9%",
"memory": "559MiB",
"connections": 256,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "20.51MB/s",
"bandwidth": "19.31MB/s",
"reconnects": 0,
"status_2xx": 4648483,
"status_2xx": 4196670,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0
Expand Down
Loading