【问题标题】:nodejs job server (multiple purpose)nodejs作业服务器(多用途)
【发布时间】:2015-01-07 12:17:21
【问题描述】:

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

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

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

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

未来需要完成的任务

  • 记录视频观看次数(当用户访问视频页面时)(这也会记录到 mysql)
  • 一般记录访问者
  • 根据搜索到的视频展示广告

我希望能够调用一个 url,以便可以将作业排队,还可以按时间安排作业,或者它们可以持续运行。

我不知道 node.js 是否是要遵循的路径,这就是我在这里问它的原因。在节点中这样做有什么好处?下站?

node.js 的专业人士有哪些?

感谢您的回复!

【问题讨论】:

    标签: node.js job-scheduling


    【解决方案1】:

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

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

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

    • 从网站抓取数据/提要 - 主要在网络 IO 上等待
    • 将数据插入 MySQL - 主要等待网络 IO
    • 报告 - 再说一遍,Node 擅长 MySQL 查询,但可能不太擅长分析数据
    • 调用 URL 来安排作业 - Node 的内置 HTTP 处理和出色的 web libraries 让这一切变得轻而易举

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

    有几个原因您可能想要使用 Node.js。如果你不熟悉 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 模块在某些事件上触发它。等等……

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          最近更新 更多