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.
Load is generated inside the dyno, so what you see is the server's own ceiling — not your Wi-Fi's.
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.
Latency distribution
no traffic yetRun 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.
https://…
/api/result/:roll
Full marksheet for any roll 26000001–26200000. The hot path.
/healthz
11-byte liveness body. The cheapest thing to flood.
/api/random
A random published result each call.
/api/toppers
Top 10 of the cohort, pre-rendered.
/api/stats
Live server telemetry as JSON (what the chart reads).
/api/info
Build info, roll range, GOMAXPROCS, dyno size.
Copy-paste load commands
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.
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.
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.
Where the time actually goes
- Hash probeOne
map[uint32]*recordread. The map is built at boot and never written again, so there is no lock and no synchronisation on the read path. - No marshallingEvery response body was serialised once during boot. Serving is
w.Write(rec.blob)— no reflection, no encoder, nothing on the heap. - Fixed-cost accountingThroughput and latency land in a sharded HDR histogram: a couple of atomic adds spread across 16 padded cache lines.
- 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.