分布式搜索引擎设计与实现
 
  一、分布式爬虫设计
 
  本研究中,分布式爬虫采用mater-slave模式,通过mater对slaves的主机进行信息传递与资源分配。首先Slave需要爬取网页的源代码,并从中取出需要爬取的url加人爬取队列中;其次对爬取到的url进行去重,保证没有重复的爬取。通过对master和slaves的分工设定,可以很好地解决这个资源抢占的矛盾。
 
分布式爬虫的工作流程
  分布式爬虫的工作流程如图1所示。首先,事先设定需要爬取的起始网页url;然后将起始url写人队列srq中,供slave读取分析。slave的工作流程如下:
 
  1、从、rq队列中爬取到url。
 
  2、对url进行访问,如果url的服务器能够访问,下载网页文本,并将网页文本存储到数据库中。
 
  3、对网页文本内容进行分析,抓取其中格式正确并且符合预先设定的抓取要求的url,将这些url写入nrq队列中。
 
  master工作流程的步骤有:①nrq队列中取出一个url;②对url进行去重(使用Bloom filter) ;③对url格式进行判断;④如果②、③的判断都通过,则将该url写人srq队列中。
 
  二、分布式索引构建
 
  本研究以分布式方式构建索引,其思路是利用Redis队列对数据进行并行运算,但与爬虫的储存控制有所不同。
 
  由于数据库已经事先储存了网页信息,所以需要分析时爬虫直接从数据库读取数据到一个队列中,不再需要master对队列进行控制。在slave中,slave利用分词模块对网页进行分析,将网页中某词出现的网页url编号,该词在网页中出现的频度,打包成预定好的数据格式,存储到分析结果队列中,然后由master读取。再由master统一对数据进行存储操作以避免多主机对数据库操作时造成的数据冲突。slave的核心结构如图2所示。
slave的核心结构
 
 
  其中,salve首先通过队列srq获取需要进行分词操作的文本;再通过队列trq获取唯一tag保证不予其它slave发生冲突;然后利用jieba分词模块对文本进行分词;最后将分词统计结果储存在<key, value>数据块中,并将该数据块加人nrq队列中,由master自行获取。
Master的核心结构
 
  Master的核心结构如图3所示。
 
  其中,master直接从nrq队列获取由slave运算得到的<key, value>数据块,将其汇总到了数据库。在本文研究中将Map-reduce思想应用到排序索引中,实现了分布式构建索引。
 
  三、分布式排序算法运算设计
 
  链接分析算法在运算时需要占用大量内存与时间,通过分布式系统的设计可以加快运算速度,以提高计算分析效率。本文研究利用了Map-reduce的思想以及基于Re-dis的队列数据传输设计分布式排序算法。
 
  排序算法采用的是Pagerank,是通过计算网站间的相关度进行排序。如果一个网站被外链接的次数越多,说明这个网站越重要。Pagerank算法首先需要生成网站出度网址的矩阵,然后生成设定每个网址的初始rank,最后通过迭代运算得到最终排名图。将Pagerank算法用到Map-reduce的思想中也能提高计算分析效率,分为两个步骤:
 
  1、Map:将每次需要运算的数据打包成约定格式的数据。需要打包的数据有:PAGERANK每轮对应站点的运算结果;对应站点的url编号;对应站点的出度网页编号。然后将这些数据包发送给slave运算。
 
  2、reduce;slave对收到的数据包进行解析,将Pager-ank值与其对应的url编号返回,由master对运算结果进行汇总,完成该轮的Pagerank运算。