DNSPod开源实践:详解dnspod-sr架构
2014-07-05 21:35:52 点击:

关于dnspod-srdnspod-sr是中国最大域名解析服务商DNSPod官方于2012年6月1日开源的一款递归DNS服务器软件。最新的一次更新是在2014年5月16日...

关于dnspod-sr

dnspod-sr是中国最大域名解析服务商DNSPod官方于2012年6月1日开源的一款递归DNS服务器软件。最新的一次更新是在2014年5月16日,修复了已发现的bug、重写了部分功能模块和优化了部分解析性能。当然现在我们对dnspod-sr的修改尚未完成,之后还会有较大的改动,持续维护下去。

开源协议: BSD协议

Github地址: https://github.com/DNSPod/dnspod-sr

dnspod-sr 性能数据

dnspod-sr性能测试

dnspod-sr作为一个运行在Linux平台上的高性能递归DNS服务器软件,具备高性能、高负载、易扩展的优势,相比 BIND等优势明显,上图就是针对BIND、dnspod-sr进行的性能测试对比数据。 

测试环境:千兆网卡、4核CPU、4G内存、Linux 64位系统

测试结果:

特点介绍

  1. CNAME解析加速:在解析过程中,dnspod-sr会首先循环查找本地缓存的CNAME记录,如果解析到CNAME记录,再去解析最后一级CNAME记录值的指定记录类型,在解析请求存在CNAME时可以省却递归解析过程,大大加快解析速度。详见 author.c 的  find_record_from_mem() 接口。
  2. A记录组包缓存:根据我们的解析日志统计,DNS解析请求超过90%都是请求的A记录(即IPv4地址),所以dnspod-sr针对此进行了一项优化,如果授权返回了A记录,则会将该A记录提前组好应答包存储到本地缓存中,在客户端下次请求该记录时省去了组包的过程,加速解析过程。但该功能在前一版本中有时候会出现解析错误的问题,在新版本中暂时移除了该功能,待修正解析错误的问题后会再下一版本重新增加该功能。
  3. 请求转发功能:通过配置 sr.conf 文件的 xfer: 模块,可以设置在解析指定的域名时直接将该解析请求发送到指定的解析服务器(可以是递归服务器也可以是授权服务器)进行解析。详见 dns.c 的pre_find() 接口。
  4. 缓存刷新功能:该功能主要用于手动强制刷新dnspod-sr本地缓存中的记录值,主要用于刷新一些被污染的记录或者TTL时间很长但又更新了记录需要快速更新生效时。需要配合 tool 目录下的客户端工具使用。
  5. HASH表缓存:dnspod-sr的本地缓存方式使用了比较流行的HASH表方式,所有数据缓存在内存中,不进行数据库的相关操作,另外quizzer列表也使用HASH表方式。详见 storage.c 中的相关接口。
  6. 内存池:内存池是新版新加的功能,主要是减少在缓存查找和递归解析整个过程中频繁的内存分配和释放操作,提高性能。详见 memory.c 中的相关接口。
  7. 系统函数重写:因为系统函数的性能问题,所以对部分系统函数进行了自行实现,如大小写转换和域名有效性检查改为使用查表法进行;字符串比较和ip地址转换也进行了重新实现等。


相关热词搜索:架构 DNSPod

上一篇:使用DNSCrypt解决DNS污染问题
下一篇:PHPCMS V9静态化HTML生成设置及URL规则优化