2015-8-2 18:50 from—http://www.dataguru.cn/thread-529666-1-1.html
主从式(Master-Slave)
对于主从式而言,有一台专门的Master服务器来维护待抓取URL队列,它负责每次将 URL分发到不同的Slave服务器,而Slave服务器则负责实际的网页下载工作。Master服务器除了维护待抓取URL队列以及分发URL之外,还要负责调解各个Slave服务器的负载情况。以免某些Slave服务器过于清闲或者劳累。这种模式下,Master往往容易成为系统瓶颈。
对等式(Peer to Peer)
在这种模式下,所有的抓取服务器在分工上没有不同。每一台抓取服务器都可以从待抓取在URL队列中获取URL,然后对该URL的主域名的hash值H,然后计算H mod m(其中m是服务器的数量,以上图为例,m为3),计算得到的数就是处理该URL的主机编号。
举例:假设对于URL www.baidu.com,计算器hash值H=8,m=3,则H mod m=2,因此由编号为2的服务器进行该链接的抓取。假设这时候是0号服务器拿到这个URL,那么它将该URL转给服务器2,由服务器2进行抓取。
这种模式有一个问题,当有一台服务器死机或者添加新的服务器,那么所有URL的哈希求余的结果就都要变化。也就是说,这种方式的扩展性不佳。针对这种情况,又有一种改进方案被提出来。这种改进的方案是一致性哈希法来确定服务器分工。其基本结构如图所示:
一致性哈希将URL的主域名进行哈希运算,映射为一个范围在0-232之间的某个数。而将这个范围平均的分配给m台服务器,根据URL主域名哈希运算的值所处的范围判断是哪台服务器来进行抓取。
如果某一台服务器出现问题,那么本该由该服务器负责的网页则按照顺时针顺延,由下一台服务器进行抓取。这样的话,及时某台服务器出现问题,也不会影响其他的工作。
参考:http://www.dataguru.cn/article-5310-1.html
主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个过程中不必与其他爬虫通信,这种方式实现简单利于管理。而控制节点则需要与所有爬虫进行通信,它需要一个地址列表来保存系统中所有爬虫的信息。当系统中的爬虫数量发生变化时,协调者需要更新地址列表里的数据,这一过程对于系统中的爬虫是透明的。但是随着爬虫网页数量的增加。控制节点会成为整个系统的瓶颈而导致整个分布式网络爬虫系统性能下降。
主从模式是指由一台服务器作为控制节点负责所有运行网络爬虫的服务器进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个过程中不必与其他爬虫通信,这种方式实现简单利于管理。而控制节点则需要与所有爬虫进行通信,它需要一个地址列表来保存系统中所有爬虫的信息。当系统中的爬虫数量发生变化时,协调者需要更新地址列表里的数据,这一过程对于系统中的爬虫是透明的。但是随着爬虫网页数量的增加。控制节点会成为整个系统的瓶颈而导致整个分布式网络爬虫系统性能下降。这种模式下,Master往往容易成为系统瓶颈。P2P模式中所有的抓取服务器在分工上没有不同。每一台抓取服务器都可以从待抓取URL队列中获取URL,然后对该URL的主域名的hash值H,然后计算H mod m(其中m是服务器的数量),计算得到的数就是处理该URL的服务器编号。这种爬取模式是目前爬虫的主流模式。
主从分布式爬虫:
专门有一台服务器负责对其它服务器提供URL(URL分发器),其它服务器则进行实际的网页下载服务,把功能进行分摊了。URL分发器维护待抓取URL队列,从中获取URL给下载服务器,并承担负载均衡工作,使每台下载服务器的工作量都差不多。google在早期就是采用的主从分布式爬虫,url服务器承担很多管理工作(处理待抓取队列,已抓取队列),url服务器成为了主从分布式爬虫的瓶颈所在。
对等分布式爬虫:
在对等分布爬虫中,每台服务器完成的工作都是一样的,但是他们各自负担一部分url抓取工作,由于没有url服务器的存在,每台抓取服务器的分工就成了问题,就在服务器自己判断哪个url需要自己抓取或者别的服务器抓取。进行哈希计算与取模,取数字决定哪台服务器下载。
主从分布式爬虫:不同服务器不同分工。其中一台是主节点,为其他机器分发URL, 相当于URL分发器。其他服务器根据分配到的URL进行网页下载。待抓取URL队列存放在主节点,主节点必须使得所有机器负载均衡。多个从节点相互独立,都只与主节点交互。主节点承担了所有的管理工作,工作量太大,一旦主节点瘫痪,整个分布式爬虫就无法正常工作。
对等分布式爬虫:服务器之间不存在分工差异,每台服务器完成的工作都一样。每台服务器自行判断某个URL有没有被抓取过。一种方法是对域名进行HASH计算来决定由哪台服务器下载。
(1) 主从分布式爬虫:
由一台master服务器, 来提供url的分发, 维护待抓取url的list。由多台slave服务器执行网页抓取功能, slave所抽取的新url,一律由master来处理解析,而slave之间不需要做任何通信。
优点:可由master做到load balance。架构简单,master控URL的分发,修改配置,以配合执行的url的抽取工作。
缺点: master无法扩展成为单点故障及性能瓶颈。
(2) 对等分布式爬虫:
由多台相同的服务器集成,每台服务器可单独运作,完成爬虫工作,每台服务器之间的分工有一定的运算逻辑(ex: hash),由运算(配置)的结果,来决定由那台服务器做抓取网页的工作。
优点: 没有单点故障,性能瓶颈的出现机率较低,扩展性强,备援性高。
缺点: 因事先定义(ex: hash),无法真的做到load balance,当某一台服务器过于忙录,分配给这台服务器的url只能等待(就算其他服务器是空闲的),扩展新的服务器,需要每台去重新定义(ex: hash)。
主从分布式爬虫:
由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理以及对其它服务器提供URL分发,其它服务器则进行实际的网页下载服务,把功能进行分摊了。URL分发器维护待抓取URL队列,从中获取URL给下载服务器,并承担负载均衡工作,使每台下载服务器的工作量都差不多,不必与其他爬虫通信,这种方式实现简单利于管理。
对等分布式爬虫:
在对等分布爬虫中,每台服务器完成的工作都是一样的,但是他们各自负担一部分url抓取工作,由于没有url服务器的存在,每台抓取服务器的分工就成了问题,需要与所有爬虫进行通信,它需要一个地址列表来保存系统中所有爬虫的信息,就在服务器自己判断哪个url需要自己抓取或者别的服务器抓取。进行哈希计算与取模,取数字决定哪台服务器下载。
主从式分布爬虫
优点:由于由一台管理服务器将待抓取URL分配给不同的抓取服务器,并对抓取服务器之间的工作进行负载均衡,使得抓取服务器可以得到有效合理地利用。
缺点:因为URL服务器承担很多管理任务,同时待抓取URL队列数量巨大,所以URL服务器容易成为整个系统的瓶颈。
对等式分布爬虫
优点:由于没有URL分发服务器,所以不存在系统瓶颈问题,另外其哈希函数不是针对整个URL,而只针对主域名,所以可以保证同一网站的网页都由同一台服务器抓取,这样一方面可以提高下载效率(DNS域名解析可以缓存),另外一方面也可以主动控制对某个网站的访问速度,避免对某个网站访问压力过大。
缺点:如果在抓取过程中某台服务器宕机,或者新加入一台抓取服务器,则每台抓取服务器的取模算法都得更新。