This post is about data residency for public-sector customers. It started, as most of our posts do, with an incident that did not go the way we expected.
Compliance is a side effect
Regulators increasingly ask for evidence of resilience, not just promises. An incident timeline with start, peak, vectors and impact is exactly the evidence DORA and NIS2 ask for — and it falls out of good observability for free.
We export incident reports in formats auditors can file without anyone rewriting them.
What actually happens during a flood
The first thing to fail during a layer 7 flood is almost never bandwidth. It is connection slots, worker processes or database connections on the origin — resources measured in hundreds or thousands, not gigabits. An attacker who can make each request expensive only needs a few thousand requests per second.
That is why we score requests before they are proxied. By the time a request reaches your origin, it has been attributed to a client, compared against that client’s history and weighed against the current load on the route it targets.
Challenges beat blocks
Blocking lists go stale within minutes when attackers rotate through residential proxies. Proof-of-work does not care where a request comes from; it only cares whether the client is willing to pay the cost.
For a real browser that cost is a few hundred milliseconds, once per session. For a botnet sending a million requests a minute it is a million puzzles a minute — and at that point the attack stops being cheap.
Latency budget
Our budget for the whole filtering pipeline is one millisecond at the 99th percentile. Anything that cannot be decided within that budget runs asynchronously and influences the next request from the same client, not the current one.
That constraint shapes everything: data structures, where state lives and which signals we are willing to compute inline.
Lessons for your own runbook
Know who can change DNS at two in the morning. Know your origin IPs and who can rotate them. Know which routes are expensive, and have a rate limit ready for each of them.
Most outages during attacks are not caused by the attack itself but by rushed changes made while under pressure.
Measuring success
We track three numbers for every incident: time to mitigation, the share of attack traffic that reached the origin, and the share of legitimate traffic that was challenged. The first should be under a second, the second under 0.1% and the third under 1%.
Those numbers go into every incident report, and they are the same numbers we are measured against in our SLA.
{ "match": { "path": "/wp-login.php", "risk": ">= 37" }, "action": "challenge" }
The full incident data behind this post is available to customers in the dashboard under Reports.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Carpet bombing is nasty. Good to see a clear explanation of it.
How do you avoid challenging uptime monitors and partners?
Our auditors asked for exactly this kind of incident evidence under DORA.
Would love a follow-up on how you handle HTTP/3 fingerprinting.
Thanks — sharing this with our on-call team.
Good question. We will cover that in a follow-up post.
Carpet bombing is nasty. Good to see a clear explanation of it.
This matches what we see in iGaming around big matches.