Benchmarks

All benchmarks are reproducible. Run them on your hardware — see Reproduce below.

Test setup (March 2026 run)

  • Hardware: 2 × AWS c7i.xlarge (4 vCPU, 8 GB RAM each), cluster placement group, eu-central-1
  • OS: Ubuntu 24.04 LTS
  • Fairvisor: latest main from github.com/fairvisor/edge
  • OpenResty: 1.29.2.1 (native, no Docker)
  • Load generator: k6 v0.54.0 (constant-arrival-rate)
  • Profile: 10,000 RPS steady state, 60s run, 10s warmup
  • Topology: two-host — Fairvisor and k6 on separate machines (VPC private network)
  • Decision API method: POST /v1/decision with X-Original-Method and X-Original-URI
  • Reverse proxy path: includes enforcement + upstream proxy hop to backend nginx

Latency

Results at 10,000 RPS (steady state):

PercentileFairvisor (decision only)Fairvisor (reverse proxy)Raw Nginx (no rate limiting)
p50304μs302μs235μs
p90543μs593μs409μs
p992.00ms1.79ms1.95ms
p99.94.00ms5.12ms3.62ms

Enforcement overhead over raw Nginx baseline: p50 +69 µs / p90 +134 µs.

Throughput

Max sustained throughput (single edge):

ConfigurationMax RPS
Simple rate limit (1 rule)195,000
Complex policy (5 rules, JWT parsing, loop detection)195,000

Memory (reference sizing)

The following memory profile is retained as a sizing reference for active limiter keys:

Active limit keysMemory usage
1,00048 MB
10,000120 MB
100,000680 MB
1,000,0005.2 GB

Memory scales roughly linearly with active limit keys because each key keeps a small fixed token-bucket state.

Reproduce

git clone https://github.com/fairvisor/benchmark
cd benchmark
bash run-all.sh

Results are published with every release.