高性能爬虫为什么使用定制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
高性能爬虫为什么使用定制DNS客户端?的更多相关文章
- 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
[网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...
- 八、asynicio模块以及爬虫应用asynicio模块(高性能爬虫)
asynicio模块以及爬虫应用asynicio模块(高性能爬虫) 一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行, ...
- LINUX DNS客户端 解析域名慢的问题。
Linux系统下域名解析的配置文件是/etc/resolv.conf cat /etc/resolv.conf # Generated by NetworkManager options single ...
- 用 Raspberry Pi 架设加密 DNS 客户端
Cloudflare 宣布使用 1.1.1.1 作为 DNS,并且强调隐私保护.由于 Cloudflare DNS 支持 DNS-over-TLS 和 DNS-over-HTTPS,这使得加密 DNS ...
- DNS客户端配置文件/etc/resolv.conf
本来不应该把DNS客户端配置文件放在这里来说,但由于新手弟兄上网时,虽然能拔号,但不能以域名访问.究其原因是由于没有修改 /etc/resolv.conf 文件: /etc/resolv.conf 里 ...
- asynicio模块以及爬虫应用asynicio模块(高性能爬虫)
一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...
- 高性能爬虫——asynicio模块
一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调 ...
- Linux企业级项目实践之网络爬虫(7)——DNS解析
DNS 是Domain Name Service的缩写.域名系统为Internet上的主机分配域名地址和IP地址.IP地址不易于记忆,然而域名地址相比较而言是方便于记忆的.用户如果使用域名地址,当想获 ...
- [置顶] ZK高级特性:Style定制与客户端集成
1.ZK与传统MVC框架的集成 由于ZK应用本质上也是基于标准Web技术Servlet框架,因此与其它MVC框架的集成没有什么特别的, 以一个典型场景为例——为一个现有的Web项目(前端采用WebWo ...
随机推荐
- COGS 577 蝗灾 [CDQ分治入门题]
题目链接 昨天mhr神犇,讲分治时的CDQ分治的入门题. 题意: 你又一个w*w正方形的田地. 初始时没有蝗虫. 给你两个操作: 1. 1 x y z: (x,y)这个位置多了z只蝗虫. 2. 2 x ...
- 【网络流24题】 No.10 餐巾计划问题 (线性规划网络优化 最小费用最大流)
[题意] 一个餐厅在相继的 N 天里, 每天需用的餐巾数不尽相同. 假设第 i 天需要 ri 块餐巾(i=1,2,-, N). 餐厅可以购买新的餐巾,每块餐巾的费用为 p 分:或者把旧餐巾送到快洗部, ...
- 使用solrj进行DIH操作
背景说明:在一个项目中需要将Mongodb中的数据导入到solr中完成搜索.在solr中Mysql数据库有对应的DIH包,可以通过配置sql语句完成数据的导入.Mongodb下也有开源的工具用来实现数 ...
- Android 通过代码设置radiobutton不同方位图标的两种方法
更换radiobutton中的图片在xml中很好设置,但对于初学者如何在代码中设置还是不容易找的.没法子,通过看原版api找到两个方法,setCompoundDrawables和setCompound ...
- C#功能扩张方式
有时候,为了完成一些window的一些操作,需要引入一些dll进行操作 1) 引入系统api进行操作,形如[DllImport("urlmon.dll", CharSet = C ...
- Android使用listView,BaseAdapter实现列表页
参考: 1.讲解很详细: blog.csdn.net/psuaije/article/details/7447391 总结: 代码:
- 【HDOJ】2955 Robberies
01背包.将最大金额作为容量v.概率做乘法. #include <stdio.h> #include <string.h> #define mymax(a, b) (a> ...
- jackson 常见问题
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type org.codehaus ...
- MVVM模式应用体会
转自:http://www.cnblogs.com/626498301/archive/2011/04/08/2009404.html 进公司实习工作后,本人接触的第一个技术名语就是MVVM模式,从学 ...
- 使用jconsole检测linux服务器
在Jboss中运行run.sh的脚本下添加如下信息: #add by step #start JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxre ...