Hi - great post, thanks. I had a question about the heat map. What is the /32s and 10Q, can you explain it some more please?
Hi -- glad you like the post. /32s are individual DNS resolver IPs we observed in each country from among the sample we took (half a percent of the traffic we saw during a 24h period). The >10Q column is how many of those resolvers we saw that did >10Q from among our sample -- you can see there are many fewer resolvers that are doing even moderate amounts of traffic.
Global Routing with Anycasted DNS. Teardown: NSONE
11–19 of 19 posts
Re: Global Routing with Anycasted DNS. Teardown: NSONE
#12Earlier quoted context omitted.
Hi -- glad you like the post. /32s are individual DNS resolver IPs we observed in each country from among the sample we took (half a percent of the traffic we saw during a 24h period). The >10Q column is how many of those resolvers we saw that did >10Q from among our sample -- you can see there are many fewer resolvers that are doing even moderate amounts of traffic.
Er -- I should have said, that did more than 10 queries from among our sample.
Edit: whoops, meant to reply to Chris below.
Re: Global Routing with Anycasted DNS. Teardown: NSONE
#13Re: Global Routing with Anycasted DNS. Teardown: NSONE
#14Re: Global Routing with Anycasted DNS. Teardown: NSONE
#15Re: Global Routing with Anycasted DNS. Teardown: NSONE
#16Interesting article. Can you elaborate a little more on why I should consider the best DNS response vs. the fastest response especially when my customers are concerned with first byte times? Also how do your filter chains differ from the likes of DNS Made Easy or DYN and what makes NSOne better?
It's actually even worse than that, because the user isn't the one directly doing the DNS query: there's an intermediary DNS resolver, which will cache the response. If the "wrong" response gets cached, then every user of that resolver will get that wrong response until the cache expires. So not only have we made the original requester's experience bad, but we've negatively impacted every other user of your application that's leveraging the same resolver.
Time to first byte is a combination of a lot of things, and if you're in more than one datacenter, it doesn't much matter how fast you spit out a DNS response if you're giving the wrong one and impacting the rest of the session going forward.
Doesn't mean you shouldn't expect the best of both worlds: sending the user to the "best" endpoint, fast.
On the filter chain question: typical/canonical approach to do any kind of decision making in a DNS system is to add some new proprietary record type, like a geo record or a health checking record. That's kind of the natural thing to do in DNS at first glance.
But if you want to get any kind of complex routing behavior, you're going to need an awful lot of different record types implementing those different behaviors, and what you end up with behind the scenes is what I often call a spaghetti of different DNS records all pointing at each other in some kind of big decision tree -- maybe a geo record, pointing at a bunch of health checking records, pointing at a bunch of CNAMEs, pointing at a bunch of A records. This quickly becomes unmanageable, and every new kind of routing you want to do results in another layer in the decision tree, all to resolve a single hostname.
The Filter Chain is a way to collapse all that down to something much more manageable and performant by bringing all the context into one place and thinking of routing as a collection of simple actions that you're taking on some input data (answers you could give, and details about those answers).
Re: Global Routing with Anycasted DNS. Teardown: NSONE
#17Re: Global Routing with Anycasted DNS. Teardown: NSONE
#18great article. thanks for sharing. looking forward to more. do you guys use any automation for maintaining your switch/router configs?
Re: Global Routing with Anycasted DNS. Teardown: NSONE
#19great article. thanks for sharing. looking forward to more. do you guys use any automation for maintaining your switch/router configs?
Most of the time we don't actually operate switches of our own, and our setup is simple enough where we don't do a ton of automation around the config where we do. What we do automate end-to-end is our BGP: our prefixes are actually announced from servers (using exabgp), not routers -- and our config there is managed by ansible, plus some real-time automation around community strings.