9 karma · joined August 1, 2014
anyway, you're not wrong, the best approach to mitigate this kind of thing is to leverage multiple dns networks. but doing so is not easy unless the application is still using dns like it was in 1995, and that is increasingly rarely the case.
you're not wrong: in this industry you never kick your competitors when they're down, everyone is subject to the same constraints, attacks, and complications. that wasn't my intention and i said so in the post.
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).
Edit: whoops, meant to reply to Chris below.
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.
At 2M queries/mo our list pricing is $8 (https://nsone.net/support/billing/). Indeed our Biz Plan is $200 -- but that includes 24/7 support, 25M queries, and other bells & whistles. If you just need a little more volume, stick with the startup plan.
That said, indeed, in general we're more expensive than R53, Rage4, and various others, because of the depth of capabilities of the platform and the quality of the support we provide. But we're also pretty unique in giving away 1M queries free with no feature locking, so our most advanced stuff is available to everyone. If you're just after basic geo-routing at the lowest cost, we're happy to help but you may find other services cheaper; but if you intend to go beyond geo to complex failover arrangements, load shedding, weighting/stickiness, network-based fencing, etc, then do some tinkering with NSONE and let us know what you think. Feedback is always good. :)