如何在Web Crawler中使用Message Queue?

时间:2015-04-04 12:44:16

标签: architecture rabbitmq message-queue

Web Crawler与位于不同计算机上的多个Worker一起使用,因此,作为集成层的Message Queue似乎非常适合。

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

如果没有MQ体系结构如下所示 - 有一个共享数据库,工作者在数据库中查找下一个要处理的URL,处理它并更新数据库。

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

如果有10万个这样的网址和100个这样的网站怎么办?我应该一次在消息队列中放置1亿个对象吗?或者应该有某种背压 - 比如 - 我把队列中的100个网址放在队列中并等待所有处理完,然后再下一个100依旧等等?

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

1 个答案:

答案 0 :(得分:2)

当您有工作人员/后台工作时,Message Queue是一个很好的模式。

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

如您所述,巨大的优势是能够控制流量,例如使用背压。

我不认为将数百万个对象保留在队列中是一个问题,它们是针对此进行优化的。例如,ActiveMQ具有分页缓存。

同时,如果您使用可靠的数据库并且您不需要管理流程,那么使用数据库可能很好。

所以这取决于你的用例:

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