Go 1.21 Cloudflare Workers edge Heroku EU + US 200,000 results

Result day.
Nobody sees a 503.

Every board publishes results at 10:00 sharp, and every year the portal folds in the first ninety seconds. This one doesn't. It's a single Go binary on one dyno holding a whole cohort in memory, and you can point real load at it right now and watch the numbers move.

Check a result →

Load is generated inside the dyno, so what you see is the server's own ceiling — not your Wi-Fi's.

LIVE TELEMETRY idle
0
requests / second
0peak —
served0
p99
in flight0
errors0

01 The surge console

Pick a concurrency level, hit run, and watch one dyno absorb it. The chart is a rolling 60-second window sampled four times a second.

Load is generated on the dyno itself and sent over loopback. It exercises the full HTTP stack but skips the internet and the Heroku router — the honest measure of what this box can serve.

8128256512
3s10s20s
throughput p99 latency
0 req/s · p99
60s agonow
Requests this test0
Sustained0req/s average
Peak0req/s, 250 ms bucket
Failed00.00% error rate

Latency distribution

no traffic yet
p50
p95
p99
p99.9

Run log


    

02 Don't take our word for it — hammer it yourself

Everything below is a public, unauthenticated GET. Point wrk, hey, bombardier, ab — or a browser flood — straight at it from your own machine and watch the live chart above react in real time.

BASE URL https://…
GET /api/result/:roll Full marksheet for any roll 26000001–26200000. The hot path.
GET /healthz 11-byte liveness body. The cheapest thing to flood.
GET /api/random A random published result each call.
GET /api/toppers Top 10 of the cohort, pre-rendered.
GET /api/stats Live server telemetry as JSON (what the chart reads).
GET /api/info Build info, roll range, GOMAXPROCS, dyno size.

Copy-paste load commands

hey
wrk
bombardier
apachebench

Or flood it from this browser tab

Fires as many parallel fetch()es as your browser and connection allow, straight at the public URL, until you stop. Watch the throughput chart in section 01 climb while errors stay at zero.

0req/s from here
0 sent · 0 failed

This is a synthetic demo dataset on a dyno that exists to be stress-tested — load away. It is your own app; please don't point it at anything that isn't.

03 It's a real portal, not a counter

Every one of the 200,000 rolls resolves to a full marksheet with subject grades, cohort rank and percentile. Same endpoint the load test is hammering.

Roll range 26000001 – 26200000

04 Take the network away

Sockets dominate the cost of a request. Strip them out and you can see what the lookup itself is worth: a hash probe plus a write of a pre-rendered body.

Runs GOMAXPROCS goroutines against the in-memory index for 700 ms and reports what they managed.

lookups / second
per lookup
workers
bytes moved

Where the time actually goes

  1. Hash probeOne map[uint32]*record read. The map is built at boot and never written again, so there is no lock and no synchronisation on the read path.
  2. No marshallingEvery response body was serialised once during boot. Serving is w.Write(rec.blob) — no reflection, no encoder, nothing on the heap.
  3. Fixed-cost accountingThroughput and latency land in a sharded HDR histogram: a couple of atomic adds spread across 16 padded cache lines.
  4. The socket is the billAccept, parse, header write, syscall. That is why the HTTP number is far below the engine number — and why the engine number is the honest headroom.

05 What's holding it up

No database, no cache tier, no queue. That is the point — the whole cohort fits in RAM, so the hard part disappears.

Everything in memory, once

At boot the process generates the cohort, ranks it, and pre-renders every JSON body. A few hundred milliseconds of work buys a request path with zero I/O in it. A read replica that never has to be consistent is just a map.

Immutable after boot

Results don't change once published, which is the property that makes this cheap. Nothing writes to the index while requests are being served, so readers need no mutex, and 200,000 records stay hot across every core.

Two regions, edge-routed

The same Standard-2X binary runs in Heroku's EU and US regions. A Cloudflare Worker at the edge sends every visitor to the closest one — nothing shared between them, so adding a region is just another copy of a map. Flip the toggle up top to feel the round-trip move.

The honest caveats

The in-dyno test skips the public internet and the Heroku router, and the generator steals CPU from the server it's measuring — so both numbers are conservative in one direction and optimistic in another. The browser test below shows the real end-to-end path, and it's bounded by your connection long before the dyno breaks a sweat.

Runtime

go
GOMAXPROCS
goroutines
heap
rss (sys)
gc cycles
last gc pause
uptime