nodejs作业服务器(多用途)

时间:2012-05-26 12:52:46

标签: node.js job-scheduling

我很新,只是了解node.js(作为PHP开发人员的背景)。我在nodejs网站上看过一些nodeJs的例子和视频。

目前我正在运行一个视频网站,在后台需要执行很多任务。目前这是由调用php脚本的cronjobs完成的。这种方法的缩减是当前一个进程仍在工作时启动另一个进程时,您将在服务器上获得高负载等。

需要在服务器上完成的作业如下:

  • 从网站抓取Feed并将其插入mysql数据库
  • 从网站获取数据(抓取)(根据要求)
  • 生成报告数据。这些主要是需要执行的mysql查询。

将来需要完成的任务

  • 记录视频视图(当用户访问视频页面时)(这也将记录到mysql)
  • 记录访客
  • 根据搜索到的视频展示广告

我希望能够调用一个网址,以便作业可以排队,也可以按时间安排作业,也可以不断运行。

我不知道node.js是否是遵循的路径,这就是我在这里问的原因。在节点中执行此操作有什么好处?缩小?

node.js的专业人员是什么?

感谢您的回复!

3 个答案:

答案 0 :(得分:7)

虽然传统上用于Web /网络任务(Web服务器,IRC聊天服务器等),但当您为其提供任何类型的IO绑定(而不是CPU绑定)任务时,Node.js会发光,因为它使用完全异步IO(即所有IO都发生在主事件循环之外)。例如,Node可以轻松地保持打开许多套接字,等待每个套接字上的数据,或者非常有效地将数据流入和流出文件。

听起来你只是想找job queue;一个流行的是Resque,虽然它是为Ruby编写的,但有PHPNode.js等版本。还有专门为PHP构建的作业队列;如果你想坚持使用PHP,谷歌搜索“PHP作业队列”会让你走得更远。

现在,使用Node.js的一个优点是,它能够非常轻松地处理大量IO。当然我只是猜测,但根据你的要求,它可能是一个很好的工具:

  • 从网站上抓取数据/ Feed - 主要是等待网络IO
  • 将数据插入MySQL - 主要是在网络IO上等待
  • 报告 - 再一次,Node擅长MySQL查询,但可能不太擅长分析数据
  • 调用URL来安排作业 - 节点的内置HTTP处理和优秀的web libraries使这成为一个简单的

因此,您可能希望尝试使用Node来完成这些任务。如果您这样做,请查看Resque for Node或其他作业系统,如Kue。如果你不需要复杂的东西,建立你自己的东西也不是很难 - Redis is a good tool for this

您可能 想要使用Node的原因有几个。如果您不熟悉JavaScript以及eventedcontinuation-passing style programming,Node.js可能会有一些学习曲线,因为您必须强迫自己停止同步思考。此外,如果您的程序中确实有很多繁重的非IO任务,例如分析数据,Node将不会优秀,因为这些计算将阻止主事件循环并阻止Node处理异步IO的回调等。最后,如果您已经有很多PHP或其他语言的逻辑,那么用您选择的语言找到解决方案可能会更容易和/或更快。

答案 1 :(得分:2)

我的上述答案。但是,您不一定需要一个完整服务的作业队列:您可以使用像async这样的流控制模块来并行或串行运行任务,尽可能快地执行任务或使用受控并发。 Node.js有许多强大的抓取/解析工具。这个post提到了一些;我刚刚听说过Trumpet;可能有很多选择。 Node.js在核心中有一个Stream模块,而Request使HTTP交互非常容易。 对于定时任务,最简单的方法是基本的setTimeout / setInterval。或者你可以把刮刀写成一个在cron上调用的脚本。或者使用核心中的EventEmitter模块在某些事件上触发它。等...

答案 2 :(得分:0)

不受控制的节点js并行作业数量可能会使您的服务器停滞不前。您将需要控制进程或以更好的方式将它们放入每个任务的队列中

对于这种需求,如果你知道php,我建议使用gearman并根据需要或通过小型PHP脚本添加作业