2012-05-26 42 views
3

我很新,只是开始了解node.js(作为PHP开发人员的背景)。我在nodejs网站上看到了一些nodeJs示例和视频。nodejs作业服务器(多用途)

目前我正在运行一个视频网站,在后台执行很多任务。目前这是由调用php脚本的cronjob完成的。这种方法的downsite就是当先前的仍然是工作,你得到的服务器等的高负荷

需要在服务器上完成的作业以下的其他进程开始:

  • 刮从网站的饲料,将其插入MySQL数据库
  • 取(根据要求)
  • 生成报告数据从网站(刮)数据。这些主要是需要执行的mysql查询。

任务需要在未来做

  • 日志视频的意见(当用户访问视频页面)(这也将被记录到MySQL)一般
  • 登录游客基于搜索到的视频
  • 显示广告

我希望能够调用的URL,这样的作业可以排队,也可以通过时间来安排工作或者CA不断运行。

我不知道node.js是否是遵循的路径,这就是为什么我在这里问它。在节点中做这件事有什么好处?小个子?

什么是专业人士在这里与node.js?

感谢您的回应!

回答

7

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

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

现在,使用Node.js的一个优势就是它能够很容易地处理大量的IO。当然,我只是猜测,但根据您的要求,这可能是工作的好工具:

  • 抽取数据从网站/供稿 - 大多是IO
  • 插入数据等待网络到MySQL - 主要是在等待网络IO
  • 报告 - 再次,节点擅长的MySQL查询,但可能不会因此在数据分析
  • 调用一个URL来安排工作好 - 节点内置的HTTP处理和出色的web libraries使这个cinch

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

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

2

我第二个以上的答案。但是,您并不一定需要全面服务的作业队列:您可以使用流控制模块(如async)以并行或串行方式运行任务,速度可以尽可能快或可控并发。 Node.js有许多强大的抓取/解析工具。这post提到一些;我刚刚听说了Trumpet;有可能有几十个选项。 Node.js在核心中有一个Stream模块,而Request使得HTTP交互非常容易。 对于定时任务,最简单的方法是基本setTimeout/setInterval。或者你可以将刮板写成一个在cron上调用的脚本。或者使用核心中的EventEmitter模块触发某些事件。 etc ...

0

节点js并行作业的不受控制的数量可能会放下您的服务器。你将需要控制过程中或在更好的方式把它们放在队列中每个任务

对于这种需求,如果你知道PHP,我建议使用的Gearman和需求或小的PHP脚本

增加就业机会