目前情况:
一个 50 个目标网站的爬虫项目,有个 200 台的集群服务器。
爬取的内容基本上是从列表页(需要翻页)开始,抓取详情页 url,然后通过 url 抓取详情页内容。
目前架构:
master(mian) 写 redis 队列任务
slave(worker) 读 redis 队列,抓取网页,解析网页,储存网页。大部分逻辑都在这里。
如果 worker 遇到了新任务,例如任务是列表页,新任务就是详情页。还需要由 worker 把新任务写到 redis ……
目前遇到的问题:
每次增加新的目标网站,都需要把 worker 集群全部更新代码
因为 worker 中集成了太多例如解析/储存这样的功能。
####于是我有个一个新的构想。
把 worker 功能抽离出来,只让集群负责抓取网页。
由 main 负责抓取之后的解析 /存储。
这样的好处就是 worker 集群代码基本保持不动,所有改动都集中在 main 服务器上。
不知道这样设计是否有问题?我觉得储存可能会有瓶颈。
####之前还有一个想法
是把“解析逻辑”和“储存逻辑”也通过任务队列传递给 worker,但是传来传去,还有新的任务生成,任务堆堆叠叠变得无比复杂。半放弃状态。
##各位兄弟姐妹,这个架构到底应该怎么设计啊?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.