python3爬虫(9)分布式爬虫与对等分布式爬虫

原文链接: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

主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个过程中不必与其他爬虫通信,这种方式实现简单利于管理。而控制节点则需要与所有爬虫进行通信,它需要一个地址列表来保存系统中所有爬虫的信息。当系统中的爬虫数量发生变化时,协调者需要更新地址列表里的数据,这一过程对于系统中的爬虫是透明的。但是随着爬虫网页数量的增加。控制节点会成为整个系统的瓶颈而导致整个分布式网络爬虫系统性能下降。

 

主从式分布爬虫
优点:由于由一台管理服务器将待抓取URL分配给不同的抓取服务器,并对抓取服务器之间的工作进行负载均衡,使得抓取服务器可以得到有效合理地利用。
缺点:因为URL服务器承担很多管理任务,同时待抓取URL队列数量巨大,所以URL服务器容易成为整个系统的瓶颈。


对等式分布爬虫
优点:由于没有URL分发服务器,所以不存在系统瓶颈问题,另外其哈希函数不是针对整个URL,而只针对主域名,所以可以保证同一网站的网页都由同一台服务器抓取,这样一方面可以提高下载效率(DNS域名解析可以缓存),另外一方面也可以主动控制对某个网站的访问速度,避免对某个网站访问压力过大。
缺点:如果在抓取过程中某台服务器宕机,或者新加入一台抓取服务器,则每台抓取服务器的取模算法都得更新。

 

 

 

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python分布式爬虫是指使用多台计算机协同工作来完成爬取任务的方式。它的优点包括能够加快爬取速度、降低单台计算机负担、提高爬取效率等。 Python分布式爬虫的实现方法有很多种,其比较常用的是使用Scrapy框架和使用Redis等分布式工具来实现。下面简单介绍一下这两种方法: 1. 使用Scrapy框架 Scrapy是一个基于Python的高级爬虫框架,它允许爬虫在多个机器上运行,从而实现分布式爬虫。使用Scrapy实现分布式爬虫的步骤如下: 1)在settings.py设置分布式相关的配置,如分布式爬虫的节点地址、爬虫队列大小等。 2)使用Redis作为分布式队列,将爬取任务添加到队列。 3)使用多台计算机启动Scrapy爬虫,每台计算机都从Redis队列获取任务并进行爬取。 4)将爬取结果保存到Redis或其他数据库。 2. 使用Redis等分布式工具 除了Scrapy框架外,还可以使用Redis等分布式工具来实现Python分布式爬虫。具体实现方法如下: 1)使用Redis等分布式工具作为爬取任务的队列,将爬取任务添加到队列。 2)使用多台计算机从队列获取任务并进行爬取,将爬取结果保存到Redis或其他数据库。 3)使用Redis等分布式工具来管理分布式爬虫的节点,如添加、删除、管理节点等。 总的来说,Python分布式爬虫需要掌握的知识点包括Scrapy框架、Redis等分布式工具、分布式爬虫的架构设计、爬取任务的管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值