高性能爬虫为什么使用定制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客户端?,布布扣,bubuko.com

时间: 2024-10-05 04:40:43

高性能爬虫为什么使用定制DNS客户端?的相关文章

DNS客户端测试工具详解

由于DNS是用户接入互联网必须设置的,这里就以CentOS系统为例介绍DNS客户端的设置. 一.相关配置文件 我们知道,从主机名到IP的映射有两种方法,一种是把主机名和其对应的IP地址记录在hosts文件中,这是早期的方法.第二种方法是通过DNS服务器经过层级解析实现主机名到对应的IP地址的映射.这两种方法至今仍在系统上被采用,那么当用户需要解析主机名时,是先查找hosts文件而后再通过DNS架构解析呢?还是先进行DNS解析?它们的优先级如何?我们先看看相关的配置文件吧. /etc/hosts:

DNS客户端配置文件/etc/resolv.conf

本来不应该把DNS客户端配置文件放在这里来说,但由于新手弟兄上网时,虽然能拔号,但不能以域名访问.究其原因是由于没有修改 /etc/resolv.conf 文件: /etc/resolv.conf 里面存放的是各大通信公司DNS服务器列表:下面的三个地址可以用一用:当然您可以打电话问你的服务商: nameserver 202.96.134.133 nameserver 202.96.128.143 nameserver 202.96.68.38 原文地址:https://www.cnblogs.

用 Raspberry Pi 架设加密 DNS 客户端

Cloudflare 宣布使用 1.1.1.1 作为 DNS,并且强调隐私保护.由于 Cloudflare DNS 支持 DNS-over-TLS 和 DNS-over-HTTPS,这使得加密 DNS 成为了热门话题. 因为操作系统往往不支持加密 DNS,所以要使用加密 DNS 必须使用一个加密 DNS 的客户端,然后这个客户端同时作为一个明文 DNS 服务器向操作系统提供正常的 DNS 服务.我可以选择在每一台我使用的设备上安装一个加密 DNS 客户端(对于 iOS 来说则是 NetworkE

爬虫—使用协程构建高性能爬虫

使用协程构建高性能爬虫 一.简介 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后导致其爬取效率是非常非常低的.为了解决这类问题,本文就来探讨一下 Python 中异步协程来加速的方法,此种方法对于 IO 密集型任务非常有效.如将其应用到网络爬虫中,爬取效率甚至可以成倍地提升.本文使用 async/await 来实现,需要 Python 3.5 及以上版本.

高性能爬虫——asynicio模块

一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是:对于单线程下串行N个任务,并不完全等同于低效,如果这N个任务都是纯计算的任务,那么该线程对cpu的利用率仍然会很高,之所以单线程下串行多个爬虫任务低效,是因为爬虫任务是明显的IO密集型程序. 关于IO模型详见链接:http://www.cnblogs.com/linhaifeng/articles

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

不同操作系统上DNS客户端操作区别汇总

结论:windows有DNS缓存,Linux默认无DNS缓存,只能依赖于安装其他软件. 一.不同操作系统的客户端的DNS缓存差别 1.windows 系统中dns 解析器会使用系统的dns缓存来提高dns域名解析效率. 例如: 查看当前的dns cache内容,可以使用  ipconfig /displaydns 可以看到当前的dns缓存ip和TTL值 2.清除当前的dns缓存内容,可以使用 ipconfig  /flushdns 3.参考这篇文档,windows默认的dns域名老化时间是5分钟

Linux DNS服务器搭建和DNS 客户端配置

操作系统版本: [[email protected] named]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.6 (Santiago) Linux下设置DNS的位置主要是, 1网卡设置配置文件里面DNS服务器地址设置, 2.系统默认DNS服务器地址设置. 3,hosts文件指定 生效顺序是: 1 hosts文件 2 网卡配置文件DNS服务地址 3 /etc/resolv.conf 安装DNS yum in

异步DNS解析的实现

在高性能爬虫为什么使用定制DNS客户端一文中阐述了DNS解析是网络爬虫的瓶颈. 目前主要有两种方法来提高DNS解析效率: 1. 基于多线程的DNS 解析 2. 基于NIO的DNS解析 dnsjava中使用的解析方式就是基于多线程的DNS解析 class ResolveThread extends Thread { private Message query; private Object id; private ResolverListener listener; private Resolve