After reading blog posts from BunnyCDN and Ctrl blog on the varying performance on top-level domains — I got curious on how .no would perform.
Daniel Aleksandersen from Ctrl blog wrote that he used points earned from his RIPE Atlas probe to run his tests. As luck would have it, I also have such a probe. I reached out to Daniel and he was very helpful in explaining how he had run his test (thanks Daniel!).
I ran tests for .net, .org and .no for about 2.5 days. Interval was set to 6 hours.
|Median (50%)||85% percentile||Samples|
|.net||11 ms||38 ms||4544|
|.org||14 ms||47 ms||4552|
|.no||27 ms||111 ms||4545|
.no is operated by Norid, they write the following about their domain name service:
The name service is designed to be extremly robust. This is achieved by implementing it as a mixture of Unicast and Anycast-structures, which results in a large number of physical machines, which are geographically and networkwise dispered around the world. The service is delivered partly by external and independent suppliers and partly by Norid. 1
I’m a bit surprised at the performance of the .no TLD, actually outperforming a lot of the other global TLDs.2 My web server IP doesn’t change, unless I migrate to a different server, so I can set my DNS records to be long-lived and maybe get a small performance gain.
- Click +DNS
- Set Interval to 21600
- Check “Use the Probe’s Resolver”
- Set Query Type to “NS”
- Set Query Argument to “org.” (with dot!)
- Repeat step 2-5 for more TLDs
- Click Probe Selection Wizard
- Write “Worldwide”
- Click Worldwide
- Select 300 probes
- Click Add, Add, OK
- Choose start and stop time
- Click Create
- Go to https://atlas.ripe.net/measurements/?page=1#tab-mine and wait for data
- Downloads -> json to get the test data
To analyze the json file I downloaded I used the following Python script:
import json, sys import numpy as np datafile = str(sys.argv) with open(datafile) as json_file: data = json.load(json_file) rt =  for p in data: for r in p['resultset']: try: rt.append(r['result']['rt']) except KeyError: pass print('samples: ' + str(len(rt))) print('50 pctl: ' + str(round(np.percentile(rt, 50), 0))) print('85 pctl: ' + str(round(np.percentile(rt, 85), 0)))
Last commit 2021-02-10, with message: remove prism ref, minor css fix