gnemoug / distribute_crawler

使用scrapy,redis, mongodb,graphite实现的一个分布式网络爬虫,底层存储mongodb集群,分布式使用redis实现,爬虫状态显示使用graphite实现
3.25k stars 1.6k forks source link

分布式是如何体现的? #25

Open lywhlao opened 8 years ago

lywhlao commented 8 years ago

hi: 您好, 我看了一下这个工程,想问一下这个工程的分布式是如何体现的? “要想尝试分布式,可以在另外一个目录运行此工程”。对句话我不是很理解。 我猜测是:同时运行多个实例,进行抓取。在这种情况下,是否会存在重复抓取的情况(如果在数据库中进行查重判断效率是否会低)? 我的思路是:1个master,n个Slave,媒介为redis。 master:负责url管理:分发url给slave,url的增加(1.自己获取的url)。 slave:通过url去下载资源。

shangshanshi commented 8 years ago

思路是对的,但其实不用那么复杂,各个爬虫直接去redis吃url就好,这个实现我具体也没看,不过推荐你看下scrapy-redis这个,这个就直接吃的,我觉得这个实现应该也是这个套路。我是小菜,github也用的不熟,希望能帮到你吧:)

yaochao commented 8 years ago

我要去看 scrapy-redis,话说这个scrapy怎么读啊,四个瑞派?

marcolin commented 8 years ago

@lywhlao 差不多就是你所描述的这样吧,在此项目的实现,就是将scheduler的队列(主要是request请求队列)放到redis服务器中,slave中的spider实例只管从队列取出请求去消费,本质便是将请求队列放到redis服务器中用于共享。由于调用简单,所以可以直接使用redis客户端操作来取代其它分布式系统中需要自己实现的RPC调用。

yaochao commented 8 years ago

谢谢^^ @marcolin