原文链接: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域名解析可以缓存),另外一方面也可以主动控制对某个网站的访问速度,避免对某个网站访问压力过大。
缺点:如果在抓取过程中某台服务器宕机,或者新加入一台抓取服务器,则每台抓取服务器的取模算法都得更新。

python3爬虫(9)分布式爬虫与对等分布式爬虫相关推荐

  1. python分布式爬虫框架_python之简单Scrapy分布式爬虫的实现

    分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度. 在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queu ...

  2. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

  3. python爬虫步骤-python爬虫步骤 (新手备学 )爬虫编程。

    Python爬虫是用Python编程语言实现的网络爬虫,主要用于网络数据的抓取和处理,相比于其他语言,Python是一门非常适合开发网络爬虫的编程语言,大量内置包,可以C Python爬虫可以做的事情 ...

  4. python 爬虫框架对比_用Python写爬虫,用什么方式、框架比较好?

    以前只写过很简单的Python爬虫,直接用内置库实现,有没有谁用Python爬过规模较大的数据,用的是什么方法? 还有,采用现有的Python爬虫框架,相比与直接使用内置库,优势在哪?因为Python ...

  5. python爬虫知网实例-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  6. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  7. python网络爬虫的基本步骤-python爬虫入门需要哪些基础/python 网络爬虫教程

    如何入门 Python 爬虫 入门个吊,放弃 python爬虫入门需要哪些基础 现在之所以有多的小伙伴热衷于爬虫技术,无外乎是因为爬我们做很多事情,比如搜索引擎.采集数据.广告过滤等,以Python为 ...

  8. python爬虫反爬机制_浅谈爬虫及绕过网站反爬取机制之Python深度应用

    我们中公优就业的老师希望能给那些面临困境的朋友们带来一点帮助!(相关阅读推荐:Python学习就看这里!) 爬虫是什么呢,简单而片面的说,爬虫就是由计算机自动与服务器交互获取数据的工具.爬虫的最基本就 ...

  9. python分布爬虫_13天搞定Python分布爬虫(第七天)(Scrapy)

    43-爬虫的基本使用 pip install Scrapy 注:windows平台需要依赖pywin32,pip install pypiwin32 创建工程:开发工具命令行(Terminal):sc ...

最新文章

  1. 学习结构[记录]类型(9) - 变体结构
  2. 《LINUX下动态链接库的创建与应用》
  3. 递归神经网络预测股票好文章
  4. 【原创】kafka client源代码分析
  5. Unity Shader 2D水流效果
  6. python——socket网络编程
  7. 工厂有库存的我司高价IMX377CQT-C回收IMX317CQC-C长期回收OV芯片
  8. 计算机组成原理中EMAR是什么,计算机组成原理(罗克露)第3章cpu.ppt
  9. 桂林电子科技大学第三届ACM程序设计竞赛 C
  10. seafile私有云盘搭建全过程记录
  11. VMware Workstations 打开.vmx 虚拟机无反应问题
  12. Visual Studio Code (Ubuntu)安装与配置
  13. SQL39 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,使用强制索引。
  14. freecodecamp上的html练习项目
  15. 项目1在线交流平台-7.构建安全高效的企业服务-3. Security整合Kafka,ES,Thymeleaf实例-对帖子置顶、加精、删除
  16. 自己编写c++代码对软件加密
  17. 用python配合微信API接口将微信个人号变为聊天机器人
  18. Android登录注册功能封装
  19. Android使用图片资源
  20. 简述java 线程四个状态_面四个选项中,哪些是线程进入阻塞状态的原因?_学小易找答案...

热门文章

  1. 常用的函数式接口_Supplier接口练习_求数组元素最大值
  2. POI的入门:绘制图形
  3. Redis分布式锁原理解析
  4. python中如何删除字典中的元素_python中字典删除元素
  5. 为什么用 php widget,ThinkPHP的Widget扩展实例
  6. 【项目经验】在填写表单时,首先添加一个失去焦点事件,将数据库中信息自动填充信息到表单,其余信息手动填写然后提交表单。
  7. 【图文详解】JAVA字面量和变量
  8. webclientt和httpwebrequest
  9. linux环境下vim创建java文件,并编译运行
  10. jsp页面模块的来源