分布式爬虫的动机

那么什么是分布式?严谨学术的概念就不搬过来了。大致来说,就是需要计算的数据量太大,任务太多,一台机器搞不定或者效率极低,需要多台机器共同协作(而不是孤立地各做各的,所以需要通信),最后所有机器完成的任务汇总在一起,完成大量任务。

然而还有一种情况,输入的待爬任务并不是固定不变的,而是实时变化的,这种情况下没办法人工以固定不变的逻辑去分割任务还能确保互相独立、互不干扰,最好的办法就是把任务集中在一处,在各台机器能互相通信的前提下,互不干扰地完成任务。

分布式爬虫还有一个动机,就是以机器换速度。有的网站反爬措施很严格,你必须得慢慢爬,否则稍微一浪就被封,这种情况下只靠一台机器一个脚本的速度肯定是无法容忍的。但是对于分布式爬虫,每一个机器的脚本都有不同的IP或者帐号cookie,都以很慢的速度在爬,当并行任务多了之后,总体上的速度就很可观。

如何构建分布式爬虫

如何构建分布式爬虫?如开头所说,只不过多了分布式而已,其他并无差别。

Redis

是一款最基于内存的no-sql数据库,简单、小巧、强大,功能应该很广泛不仅仅只是爬虫,但是在分布式爬虫中很好用。

Redis的安装与配置就不细说了,网上很多教程。Redis-server打开后长这样:

(图中标注的是stand alone mode表示单机模式,在分布式爬虫中要配置 成cluster model的集群模式)

配置好了之后测试一下,如果在各个机器上实现了数据共享就表示打通了分布式环节了。

分布式爬虫任务调度

分布式通信中有一个

Master-Slave

模型:其中Master是核心,它来生产、调度任务;其他多个Slave从Master中读取任务并执行。可以简单地把Master理解成包工头,Slave是搬砖工。

一个通用的模式是一个Master对应多个Slave,Master只负责写入任务,Slave只负责读任务,二者同时进行,读写分离比较不容易出错。当然你也没必要非按这个模式来,你也可以设置成Master和Slave都可以读写任务,只要你自己能理解、控制程序逻辑。

以一个例子来说明分布式爬虫的任务调度:

Redis中有好几种数据结构,其中简单点的用set就好,用来存储互不重复的爬虫任务url;复杂点的就用hash表。首先Master程序源源不断地往Redis里写入互不重复的url,各个Slave每次随机从中抽取一个任务执行,一旦成功执行就删除该url,直到Redis中的任务已空。

这种方式会不会造成slave之间任务重复?不必担心。首先,当Redis中的任务很多时,有限的slave随机抽1个任务还能有相互重复的概率很小;其次,各个slave在执行任务时并不同步,当完成一个任务时立刻删除,所以抽到已被完成的任务概率也很小;再次,在数据库的表中建好主键,即使重复爬取,也不会重复插入。

与人工手动分割任务相比,分布式爬虫其实还有以下的优点:

从Redis中读取、处理数据比在MySQL中快得多;

代码基本上不用改,最多改改IP和cookie,而不必每一个脚本都去改输入任务。

总结

以 上就是我对Java架构师之路-分布式动机是什么丶如何构建分布式爬虫原理技术与实现问题及其优化总结,分享给大家,希望大家知道什么是Java架构-分布式动机是什么丶如何构建分布式爬虫原理技术与实现问题及其优化。觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持!

1、多写多敲代码,好的代码与扎实的基础知识一定是实践出来的

2、可以去百度搜索腾讯课堂图灵学院的视频来学习一下java架构实战案例,还挺不错的。

最后,每一位读到这里的网友,感谢你们能耐心地看完。希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步!都能赢取白富美,走向架构师的人生巅峰!

3丶想了解学习以上课程内容可加群:722040762 验证码:简书(666 必过)欢迎大家的加入哟!

文章来源于互联网:Java架构师之路-分布式动机是什么丶如何构建分布式爬虫原理技术与实现

发表评论