网页下载过程中的网络延迟成为整个系统性能的瓶颈。为提高效率,网络蜘蛛设计成队列缓冲、多线程并行结构。网络蜘蛛的三大模块:

  1. HTTP下载模块。利用HTTP协议下载,获取并存储网页内容。

  2. 链接分析模块。提取网页内的超链接,获取后续页面入口。

  3. 下载控制模块。控制网页访问次序、更新策略、访问队列高度等。

入口页面往往是网站的主页功sitemap页面。

Spider对网站的访问尝试一般控制在3~5层。

网络爬虫的优化策略和原则:

  1. 避免重复下载。

  2. 增加多个工作队列,提高并了能力。工作队列有:等待队列、处理队列、成功队列、失败队列。

  3. 利用网页Proxy缓冲,检查是否需要从远程下载。

  4. 同一站点的URL尽量映射到同一个线程处理,避免同时访问给网站带来负担。

Nutch相比,HeritrixLarbin没有与检索密切结合,用户需要自己负责文件格式的转换和索引工作。

下载后的数据存储主要以目录文件形式存放。具体见容包括:

  1. Web数据库。实际上是URL数据库,只为网络爬虫服务,不参与后面的检索与加载工作。

  2. 数据段(segment)。它包括三种类型:待下载列表(fetchlist)、已获得的网页(fetcher output)、数据段索引(index--采用Lucene格式索引当前已下载的索引。

  3. 数据索引。它是 数据段索引的合并和汇集。

搜索引擎的3种分类:全网、垂直和企业搜索引擎。

网络爬虫的2种工作模式:互联网全网抓取和局域网抓取。

Nutch系统已经扩展了一套底层使用分布式结构的大型搜索引擎。

真实的互联网全网搜索引擎需要一个很大入口URL列表,DmozParser工具提供了对开放式互联网DMOZ目录库的支持。另一种方法是查找国内比较大的互联网站点,比如可以从互联网网站大全或网站排行榜里分析URL获得,在实际测试中采用了vipurls.txt文件,里面存放了100个比较大的国内互联网网站。

总体来说Heritrix网络蜘蛛的功能更为强大,Nutch更好地支持搜索引擎(与Lucene紧密结合)。两者特点对比如下:

  1. Nutch是一个搜索引擎框架,而Heritrix专注于网络信息的下载。

  2. Nutch只获取并保存可索引的内容,并可对下载后有内容过滤修改,而Heritrix则可以适用各种类型信息,严格保持网页原貌。

  3. Nutch的更新策略是直接替换原来的旧网页,为索引作好准备;而Heritrix则保留历史内容,下载新内容。

  4. 都以任务形式管理,Nutch只支持命令行,Heritrix还支持Web控制界面。

  5. Nutch下载控制参数少,Heritrix更加灵活。

Heritrix中有几个关键模块这里介绍一下:

  • 下载控制器CrawlController。总控部分,以主线程形式运行。通过调试,最终把下载地址管理器Frontier中地址列表传递给线程池中的ToeThreads,完成下载任务。

  • 边界控制器Frontier。用来确定下一个将抓取的网页。实现对网站访问的均衡处理,避免多线程同时访问同一个网站造成网站压力。Frontier内至少包含最新发现的URL、正在处理的URL、已经下载的URL

  • 服务器缓存Servercache。实现搜索引擎中的DNS缓存。Servercache中存放服务器的持久信息,包括IP地址、历史下载记录、机器人策略等。

开源缓存系统:

  1. OSCache是很多Java项目中广泛采用的高性能J2EE缓存框架。OsCache适用于任何Java应用程序中的缓存方案。

  2. JCS(Java Caching System)是一个分布式缓存系统,是基于服务器的Java应用程序。

  3. EHCache是一个纯Java实现的缓存系统,开发者调用EHCache的方式为嵌入用户系统的进程完成缓存。

  4. JBossCache是针对JBoss服务器系统的缓存程序。JBossCache主要应用于事务处理缓存,能够缓存企业级应用数据。

posted on 2011-07-20 15:13  高性能golang  阅读(6049)  评论(1编辑  收藏  举报