首页 > 代码库 > 高性能爬虫为什么使用定制DNS客户端?
高性能爬虫为什么使用定制DNS客户端?
DNS 解析是高性能网络爬虫的瓶颈,主要是因为:
1. 由于域名服务的分布式的特性,DNS解析可能需要多次的请求转发,有时需要几秒甚至更长的时间来解析出相应的IP 地址。
2. 现有的标准库对DNS解析的实现是同步的。
JAVA中InetAddress.getByName是线程阻塞的。并且JAVA中实现的DNS缓存在没有设置security manager的情况下TTL的时间仅有30s。
Unix/LINUX中gethostbyname函数问题更大,在多线程的情况下,只要有一个线程的gethostbyname函数阻塞,其他的线程都会在该函数阻塞,严重的影响系统性能。
使用定制的DNS客户端可以缓解甚至消除DNS解析带来的瓶颈问题:
1. 在定制的客户端中实现DNS Resolver,支持递归查询,并缓存DNS响应。在进行DNS解析时可先到缓存中进行查询,如果命中则直接返回IP地址,如果查询到NS记录,则直接发送消息给授权域名服务器进行查询,减少DNS请求次数。
如上图所示,传统的DNS客户端把所有的DNS请求都发到配置的DNS服务器,而定制的DNS客户端则直接到closer DNS server进行解析。相比之下,定制的
DNS客户端不仅实现了负载的均衡而且还减少了请求的次数。
2. 在定制的客户端中可采用异步解析的方法来提高解析效率。
参考:
http://blog.csdn.net/shijun_zhang/article/details/6577426
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。