In this section, we discuss the design of CoDNS, a name lookup system that provides faster and more reliable DNS service while minimizing extra overhead. We also discuss the observations that shape this approach. Using trace-driven workloads, we calculate the overheads and benefits of various design choices in the system.
One important goal shapes our design: our system should be incrementally deployable, not only by DNS administrators, but also by individual users. The main reason for this decision is that it bypasses the bureaucratic processes involved with replacing existing DNS infrastructure. Given the difficulty we have in even getting information about local DNS nameservers, the chances of convincing system administrators to send their live traffic to an experimental name lookup service seems low. Providing a migration path that coexists with existing infrastructure allows people the opportunity to grow comfortable with the service over time.
Another implication of this strategy is that we should aim for minimal resource commitments. In particular, we should leverage the existing infrastructure devoted to making DNS performance generally quite good. Client-side nameservers achieve high cache hit rates by devoting memory to name caching, and if we can take advantage of the existing infrastructure, it lessens the cost of deployment. While current client-side infrastructure, including nameservers, is not perfect, it provides good performance most of the time, and it can provide a useful starting point. Low resource usage also reduces the chances for failure due to resource contention.
Our usage model is cooperative, operating similarly to insurance -
nodes join a pool that shares resources in times of need. If a node's
local lookup performance is acceptable, it proceeds as usual, but may
have to provide service to nodes that are having problems. When its
local performance degrades, it can ask other nodes to help it. The
benefit of joining is the ability to get help when needed, even if
there is some overhead at other times.