【问题标题】:Can I use cluster in a node.js express app still spawn child_process workers for specific requests我可以在 node.js express 应用程序中使用集群仍然为特定请求生成 child_process 工作人员吗
【发布时间】:2015-07-19 04:35:03
【问题描述】:

编辑: 我正在简化我的问题,因为虽然@saintedlama 的回复是有用的信息,但它与我试图理解的关于使用多个单个节点进程的内容相切。

问题的关键是:如果应用程序正在使用已经使用 node's native cluster module 运行的子进程,我该如何或可以管理手动生成的子进程?

以下原始问题


我有一个 express.js 应用程序,主要功能是接受 http 请求并通过一些 MongoDB 查询提供 http 响应。为提高性能,该应用使用 node's native cluster module,并在应用启动时作为工作进程跨可用 CPU 生成。

我现在有一些可能长时间运行的特定查询 - 连接到外部服务和 API。

  1. 是否值得将这些特定查询生成给他们自己的工作人员(使用 node's child_process)?

  2. 如果是这样,这将如何受到集群的现有使用影响?

  3. 如果我使用 MonqAgenda 之类的东西设置一个持久工作队列(或者也可以),并且考虑到我正在使用集群,我如何控制哪个进程处理队列?

【问题讨论】:

    标签: javascript node.js mongodb express multiprocessing


    【解决方案1】:

    根据在 node.js JavaScript 处理中完成的工作,将长时间运行的查询派生到某些分叉的工作人员可能不会产生任何好处。

    Node.js 在后台的专用线程(池)中进行所有 IO 处理(查询是 IO)。因此,当数据库系统处理查询时,您的 node.js JavaScript 进程不会被阻塞。 如果您在 JavaScript 中进行大量查询结果后处理,它可能会带来好处,因为在 JavaScript 代码中进行后处理时,JavaScript 处理器会被阻塞。

    使用作业队列异步执行这些查询有好处,因为您可以在同一进程中开始使用作业处理器进行开发,稍后您可以通过将作业处理器部署到环境中的专用机器来轻松扩展。但是:请谨慎使用这种方法,因为查询结果非常大可能会减慢您的作业队列。

    【讨论】:

    • 所以生成一个子工作进程会适合 CPU 密集型查询,但不一定需要长时间运行 IO 到另一个服务?在给定集群环境的情况下,我将如何管理生成的 CPU 密集型进程?
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2015-01-16
    • 2010-12-16
    • 2011-11-22
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多