godnsproxy v1.0.1 发布,一个高效快速的dns缓存服务器

Godnsproxy

注:本项目基于AdGuardTeam的 Dnsproxy 项目fork过来,并精心调优,删减瘦身,得到一个更快,更轻便的暴力美学dns缓存服务器

修改变动如下:

  1. 移除了非必要的lock机制,无锁,所以更快
  2. 优化了并发dns查询机制,更快的返回查询结果,并进一步降低CPU,内存占用
  3. 去除了不合理的并发量限制,基于前两项的优化,让系统有能力拿掉限制,只要你机器资源不差,来多少,接多少,处理多少请求
  4. 引入goroutine 缓存池机制,避免瞬时高并发,go 协调不过来,预先预热goroutine worker, 让业务运行效率更高,因为不需要分配新的goroutine,会充分利用已有的pool
  5. 引入 dial keepalive,基于tcp相关的upstream,都可以从中获益,建立连接所需时间更短
  6. 设置更长的deadline,理论上,可以保持更长的连接,查询就更少概率建立全新的连接,在已有的连接上查询,不是更快么
  7. 屏蔽掉ipv6, 大强国自有那国情在此,ipv4 估计还能玩10年
  8. 删减了部分逻辑,不需要的逻辑拿掉,进一步降低内存占用
  9. 支持golang 1.19,因为go 1.19 的内存机制更新了,所以为什么不用最新的go版本呢?上游AdGuardTeam截至到目前,还没支持go 1.19,而我已经支持了

再次感谢AdGuardTeam 团队。我估计我这个暴力修改,他们是不会认可的。 但是不管怎么说,我自己用的快乐就行了。

安装使用

下载 预编译的二进制文件,是最快的。

然后下载配置文件实例

https://github.com/godnsproxy/godnsproxy/blob/master/config.yml

到你本地,比如我的启动命令是

/Users/nomore/tmp/godnsproxy --config-path=/users/nomore/tmp/config.yml

默认godnsproxy启动会监听:53端口,你用dns查询工具,比如dig, 可以验证godnsproxy是否正常工作

$ dig www.baidu.com

; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43792
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.			IN	A

;; ANSWER SECTION:
www.baidu.com.		60	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	60	IN	A	112.80.248.75
www.a.shifen.com.	60	IN	A	112.80.248.76

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jul 13 17:02:41 CST 2022
;; MSG SIZE  rcvd: 101

分类: Go 标签: 内存 查询 删减 更快 并发 连接 机制 缓存 拿掉 基于 发布于: 2022-07-13 17:04:53, 点击数: