Web crawler 消息队列:哪种情况最好?
我写了一个网络爬虫 爬虫程序有两个步骤:Web crawler 消息队列:哪种情况最好?,web-crawler,message-queue,Web Crawler,Message Queue,我写了一个网络爬虫 爬虫程序有两个步骤: 获取html页面 然后解析页面 我想使用消息队列来提高性能和吞吐量 我认为有两种情况: 情景1: urlProducer:获取目标url并将其添加到队列1 urlConsumer:根据作业信息,获取html页面并将其添加到queue2 parserConsumer:根据作业信息,解析页面 情景2: urlProducer:获取目标url并将其添加到队列1 urlConsumer:根据作业信息,获取html页面并将其写入db parserProducer
我认为有两种情况: 情景1: urlProducer:获取目标url并将其添加到队列1 urlConsumer:根据作业信息,获取html页面并将其添加到queue2 parserConsumer:根据作业信息,解析页面 情景2: urlProducer:获取目标url并将其添加到队列1 urlConsumer:根据作业信息,获取html页面并将其写入db parserProducer:从db获取html页面并将其添加到queue2 parserConsumer:根据作业信息,解析页面
每个结构中都有多个生产者或消费者 场景1喜欢连锁电话。当发生错误时,很难找到问题的症结所在 场景2将队列1和队列2解耦。当发生错误时,很容易找到问题的症结所在 我不确定这个概念是否正确 哪种情况最好?还是其他情况
谢谢~我认为场景1是您最好的选择,因为您不必监视数据库,这可能会降低速度。不确定您打算用什么来实现这一点,但我可以通过两种不同的方式来实现:
还有其他方法可以做到这一点(web服务、嵌入式队列(如ZeroMQ)、其他代理等),但由于您提到了吞吐量,这两种方案将为您提供良好的吞吐量。我认为,如果您想使用简单的消息传递系统,第二种方案将是处理此问题的更好方法。您已经实现的三个关键任务是获取链接、从链接中获取页面以及解析它们以获取所需信息。我们需要记住,执行这些操作的速率是不同的,这取决于所获取页面的大小。最好使用中间存储,以避免排队系统阻塞
这就是说,我同意@在这个问题上的回答,即使用风暴集群而不是简单的排队机制。Storm worker节点还可以为您定义流量控制方法,以平均速率改变不同流的流量。在这种情况下,第一种情况会更有利。因此,您的选择将取决于您计划使用什么来实现您的解决方案。我认为这个问题应该转移到,因为它符合
软件架构和设计
作为程序员主题之一的要求。
structure:
urlProducer -> queue1 -> urlConsumer -> queue2 -> parserConsumer
structure:
urlProducer -> queue1 -> urlConsumer
parserProducer-> queue2 -> parserConsumer