Godns - Go实现的DNS缓存服务器

kenshin · · 10647 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近用Go写了一个DNS缓存服务器,主要实现两个功能:

  • DNS缓存
    有缓存失效机制,在cache未命中时,支持设置上层递归服务器。
  • 全局hosts
    维护全局的hosts设置,统一实现解析域名到指定IP的需求。
    另外,支持动态更新hosts记录,而不需要重启服务器进程。

重新造一个轮子的原因

实现了DNS缓存服务器并支持自定义的hosts的开源软件有很多,例如dnsmasq,之所以我们要自己写一个,是因为dnsmasq的hosts记录都是写在本地文件中,更新一条记录后,要重启进程才能生效。而我们需要能在不同的服务器上共同维护一个全局的hosts记录,并在hosts记录修改后能立即生效。目前能找到的实现,包括dnsmasqpdnsddjbdns,还没有一个能完全满足我们需求的。

用Go实现的原因

之所以用Go来实现主要是担心Python的性能问题,刚好最近看了大量Go的开源项目,因此便想要Go来尝试一下。实践证明,Go确实非常适合这类服务器端应用的开发。程序性能还不错,我们在4核2.5G CPU, 46G 内存的服务器上测试,每秒大概能处理1.6W多个请求,这台机器上同时还跑了一些其它应用,如果在干净的机器上测试,数据应该还会更好一些。另外,整个开发效率也没比python慢多少,差不多一个礼拜就完成了所有功能的开发。

目前godns已经部署到了我们的生产系统。
同时把代码放到github上:https://github.com/kenshinx/godns , 欢迎有需要的同学试用,如果有什么问题可以在github上反馈。


有疑问加站长微信联系(非本文作者)

本文来自:kenshin 的博客

感谢作者:kenshin

查看原文:Godns - Go实现的DNS缓存服务器

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

10647 次点击  
加入收藏 微博
上一篇:Go Reflect
下一篇:LRU 算法
1 回复  |  直到 2018-03-21 15:59:40
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传