fit
Infrastructure · Go
fit, a reverse proxy, static file server and API gateway built on fib, with a Go handler module compiled in as fit build does: httparena answers /baseline11 and /baseline2, httparena_json /json/{count}, serializing the body per request from the dataset read when the config is loaded. /pipeline is fit's respond handler and /static/* its static handler, which keeps small files in memory, revalidates them against the disk every second and serves the .br/.gz twins on disk off Accept-Encoding. One process, fib's default engine settings, from a .conf config: HTTP/1.1 on :8080, h1 over TLS on :8081, h2c on :8082, h2 and h3 (fib's own QUIC) on :8443, TLS on crypto/tls.
Achievements
🥇 2 Gold · 🥈 2 Silver · 🥉 4 Bronze. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥇 Gold | Test profile | Connection · Pipelined | 1 of 7 |
| 🥇 Gold | Test profile | HTTP/3 · Static | 1 of 4 |
| 🥈 Silver | Family composite | Composite · HTTP/3 | 2 of 4 |
| 🥈 Silver | Test profile | Workload · Static TLS | 2 of 5 |
| 🥉 Bronze | Family composite | Composite · HTTP/1.1 | 3 of 7 |
| 🥉 Bronze | Test profile | HTTP/2 · Baseline | 3 of 6 |
| 🥉 Bronze | Test profile | HTTP/2 · Static | 3 of 6 |
| 🥉 Bronze | Test profile | HTTP/3 · Baseline | 3 of 4 |
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 3 of 7 | 3279 |
| HTTP/2 | 4 of 6 | 739 |
| HTTP/3 | 2 of 4 | 1443 |
Every result
Alpha Round, 16 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 2,375,866 | 1.72ms | 10.80ms | 5723.7% | 205MiB |
| Connection | Pipelined | 4,096 | 9,891,560 | 6.61ms | 55.00ms | 5636.6% | 295MiB |
| Connection | Short-lived | 4,096 | 1,566,794 | 2.60ms | 7.79ms | 4634.0% | 163MiB |
| Workload | JSON TLS | 4,096 | 520,166 | 18.78ms | 384.95ms | 5109.0% | 265MiB |
| Workload | Static TLS | 1,024 | 872,862 | 4.79ms | 271.83ms | 5424.6% | 173MiB |
| HTTP/2 | Baseline | 256 | 6,175,180 | 4.01ms | 46.97ms | 6144.2% | 238MiB |
| HTTP/2 | Baseline | 1,024 | 6,237,377 | 16.05ms | 235.41ms | 6333.4% | 615MiB |
| HTTP/2 | Static | 256 | 532,915 | 10.35ms | 1.65s | 4415.6% | 419MiB |
| HTTP/2 | Static | 1,024 | 508,970 | 30.00ms | 2.86s | 4654.9% | 999MiB |
| HTTP/2 | Baseline (h2c) | 256 | 7,865,481 | 3.07ms | 28.35ms | 6358.7% | 235MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 8,273,050 | 11.70ms | 125.55ms | 6315.2% | 600MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 7,980,412 | 49.75ms | 1.02s | 6204.5% | 1.7GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 949,036 | 33.16ms | 2.19s | 5743.8% | 1.8GiB |
| HTTP/2 | JSON (h2c) | 4,096 | 897,660 | 136.99ms | 2.75s | 5251.4% | 3.9GiB |
| HTTP/3 | Baseline | 64 | 3,823,767 | 862us | 4.89ms | 5278.8% | 162MiB |
| HTTP/3 | Static | 64 | 811,242 | 4.39ms | 18.25ms | 5749.0% | 343MiB |
Compared with
The Go entries around fit on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs fit | |
|---|---|---|---|
| fiber-tuned | 6020 | +84% | head to head |
| fnet-h1 | 4573 | +39% | head to head |
| go-fasthttp | 3515 | +7% | head to head |
| echo | 2121 | -35% | head to head |
| gin | 2109 | -36% | head to head |
Compare fit with any Go entry · Compare fit with any entry, in any language · Every Go entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry