如何在分布式网络爬虫中分配 URL 边界和爬虫工人?

时间:2021-07-10 01:53:25

标签: apache-kafka web-crawler scalability distributed-system system-design

我已经阅读了一些关于设计分布式网络爬虫的文章,但仍然有一些与架构相关的问题,尤其是分布式 URL 前沿和爬虫工作器。目前,我有两个选择:


  1. URL Frontier 和爬虫 worker 是独立的微服务,而 URL Frontier 会根据一些 hash 或规则将要爬取的 URL 发送给 worker,理想情况下,相同 IP 的 URL 应该转到同一个 worker(为了控制 QPS 并避免重复TCP 连接)。

但是通过这种方式,爬行的 worker 似乎不是无状态的,每个 worker 都为未访问的 URL 维护一些队列,一个 worker 如何从故障中恢复?另外,我觉得工作人员应该是无状态的,这样更有利于可扩展性。


  1. 使用分布式消息队列(例如 Kafka)作为 URL 边界,爬行工作者从队列中获取 URL,我猜拉队列适合这种情况。

但是对于这个解决方案,我不确定如何保证相同的 IP 可以转到同一个 worker,Kafka 等消息队列似乎没有这种自定义路由策略?

0 个答案:

没有答案