4

我正在评估使用 Storm(实时框架,而不是 IDE)构建一个网络爬虫。我的 Spout 将传递一个 URI 流,必须在第一个 Bolt 中调用和检索,这是用 php 编写的。

来自 node.js 背景,我知道可以使用回调以非阻塞方式构建这样的功能。我的幼稚想法是,只为那个 Bolt 配置很多 Tasks,以便在一些 Taks 等待答案的同时充分利用资源。问题是,php 以为每个进程分配大量资源而臭名昭著,我不知道 Storm 是如何在内部管理这些资源的,以及这是否是个好主意。

在这种环境中是否可能出现类似 node.js 的行为?或者我是否必须为这个 Bolt 切换到另一种语言才能实现它(如果是,我该怎么做)?

4

1 回答 1

1

我编写了一个使用 Storm 和非阻塞 HTTP 调用的网络爬虫,尽管是在 Java 中。我们一直在生产中使用它,它工作得很好。

我们有一个来自 spout 的 URL 流,它被分派到爬虫螺栓。每个螺栓将发出非阻塞 HTTP 请求,我在其上注册一个回调,该回调将向输出收集器发出结果。即是的,您可以使用 Storm 进行非阻塞 IO。

我不熟悉 PHP 开发,所以我不能评论那么多,但无论你做什么,与基于 JVM 的语言相比,由于进程间消息传递,它的性能可能会很差。

注意:在最新版本的 Storm 中,输出收集器不再是线程安全的,所以当你异步发出东西时,一定要在它们上同步。

于 2013-02-23T21:16:48.080 回答