Web Crawler与位于不同计算机上的多个Worker一起使用,因此,作为集成层的Message Queue似乎非常适合。
但问题是我不明白该怎么做。
如果没有MQ体系结构如下所示 - 有一个共享数据库,工作者在数据库中查找下一个要处理的URL,处理它并更新数据库。
但是,如何用MQ做到这一点?假设要将处理的站点的URL存储在DB中,我应该将它们全部放入Message Queue for Workers中吗?
如果有10万个这样的网址和100个这样的网站怎么办?我应该一次在消息队列中放置1亿个对象吗?或者应该有某种背压 - 比如 - 我把队列中的100个网址放在队列中并等待所有处理完,然后再下一个100依旧等等?
或者,这样的用例可能不适合Message Queue吗?
答案 0 :(得分:2)
当您有工作人员/后台工作时,Message Queue是一个很好的模式。
但通常你需要在延迟很重要时使用它,或者你想要监听多个不同的源(在这种情况下,队列通常比数据库访问更快/更好)。
如您所述,巨大的优势是能够控制流量,例如使用背压。
我不认为将数百万个对象保留在队列中是一个问题,它们是针对此进行优化的。例如,ActiveMQ具有分页缓存。
同时,如果您使用可靠的数据库并且您不需要管理流程,那么使用数据库可能很好。
所以这取决于你的用例: