mirror of https://github.com/getdnsapi/getdns.git
added proposed cache design
This commit is contained in:
parent
19e84c8ec4
commit
cce542dd07
|
@ -0,0 +1,65 @@
|
|||
proposed getdns cache design
|
||||
Glen Wiley <gwiley@verisign.com>
|
||||
|
||||
API Description Requirements
|
||||
============================
|
||||
Considerations regarding cache are slightly different depending on
|
||||
whether we are operating as a stub resolver or a recursive resolver.
|
||||
The API description requires that we operate as a recursive resolver
|
||||
and considers stub resolver behavior optional.
|
||||
|
||||
Recursive Resolver Cache
|
||||
========================
|
||||
Caching is arguably an important feature for most recursive resolvers.
|
||||
In this case we are not intending a replacement for the fully
|
||||
functional recursive resolvers already available (BIND, Unbound, etc.)
|
||||
so we shoudl limit a cache implementation to behaviors important to
|
||||
proper operation of a recursive resolver.
|
||||
|
||||
DNSSEC validation can potentially triggers more queries than a simple
|
||||
request for a A RR so I think it makes sense to cache root and TLD
|
||||
data. Once we have gone that far it isn't much of a reach to cache
|
||||
at each layer in the hierarchy (depth will not increase the coding
|
||||
effort or defect rates).
|
||||
|
||||
Bear in mind that this resolver will only answer local processes,
|
||||
it is not listening for queries over the network.
|
||||
|
||||
Stub Resolver Cache
|
||||
===================
|
||||
One well supported poition is that a stub resolver should not cache
|
||||
DNS replies as it relies on a proximate recursive resolver for
|
||||
iterative resolution and caching. DNSSEC validation introduces
|
||||
a potential use case for caching even when we would prefer to not
|
||||
cache DNS replies in the stub resolver. I'd like to avoid a
|
||||
religious debate about whether a stub resolver should have a cache
|
||||
and focus on what we need to make the getdns API best suited to
|
||||
its intended focus.
|
||||
|
||||
Since a cache makes sense for a recursive resolver we will need
|
||||
to implement it anyway. With that in mind I recommend that we
|
||||
use a configuration setting to enable caching and control its
|
||||
behavior when running as a stub resolver.
|
||||
|
||||
Cache Design Points
|
||||
===================
|
||||
If we assume that we need a cache implementation (which I concede is
|
||||
not yet decided) then I would recommend the following design points:
|
||||
|
||||
Local configuration via API or local file (e.g. /etc/getdns.conf, ~/.getdnsrc)
|
||||
- turn cache on/off
|
||||
- turn negative cache on/off
|
||||
- use a per user cache vs. system wide cache
|
||||
- max TTL/TTL override (separate for pos/neg cache entries)
|
||||
- inclusions (use cache for specified domains) (maybe over-eng)
|
||||
- exceptions (avoid ache for specified domains) (maybe over-eng)
|
||||
- persistant vs. transitory cache
|
||||
|
||||
- cache data store via Berkely db to allow for persistance
|
||||
|
||||
- negative cache TTL derived from SOA
|
||||
|
||||
- positive cache TTL
|
||||
|
||||
- max entries - flush oldest entries when max reached
|
||||
|
Loading…
Reference in New Issue