2015-04-04 120 views
0

Web爬虫可以与位于不同机器上的多个Worker一起工作,所以看起来Message Queue作为集成层应该很好。如何在Web爬虫中使用Message Queue?

虽然问题是我不明白该怎么做。

没有MQ体系结构看起来像下面这样 - 有一个共享数据库,Worker在数据库中查找下一个要处理的URL,处理它并更新数据库。

但是,如何用MQ做到这一点?假设要处理的站点的url存储在数据库中,我应该将它们全部放入Message Queue for Workers使用吗?

如果有100 000个这样的网址和100个这样的网站会怎么样?我应该一次将100 000 000个对象放入Message Queue中吗?或者应该有某种背压 - 比如说 - 我把100个网址放在队列中,然后等待所有处理完成,然后再放100个等等?

或者,这样的用例可能不太适合Message Queue?

回答

2

当你有工人/后台工作时,消息队列是一个很好的模式。

但通常您需要在延迟很重要时使用它,或者您需要侦听多个不同的源(在这种情况下,队列通常比数据库访问更快/更好地实现)。

巨大的优势是能够控制流量,例如使用背压,正如您所提到的那样。

我不认为这是一个问题,以保持数百万的对象在队列中,他们为此进行了优化。例如,ActiveMQ有一个分页缓存。

同时,如果您使用可靠的数据库并且不需要管理流量,那么仅使用数据库可能就没有问题。

所以,这取决于你的使用情况:

  • 使用数据库,如果你的流量是简单,比如只是一个应用程序,生成的URL解析。
  • 如果您有多个不同的来源和/或低延迟是您的目标,请使用Message Queue。