【问题标题】:Multiple instances of node.js on different cores不同内核上的多个 node.js 实例
【发布时间】:2013-07-30 18:34:15
【问题描述】:

我想设置 4 个不同的 node.js 实例,每个实例都在自己的核心上。 node.js 是在同一个核心上堆叠新实例,还是也将它们设置在新核心上?

实例不相关,单独接收请求。我希望 CPU 负载均匀分布。 我一直无法找到这个问题的明确答案。

【问题讨论】:

  • 能否请您添加一些您想要实现的场景的细节?
  • @VivekBajpai 我有 4 个 nodejs 服务器永远运行,在高峰期每个都可能会遇到沉重的负载,我认为在高峰期将它们各自设置到自己的核心会有所帮助。
  • 您是在 EC2 之类的虚拟服务器还是在专用的真实服务器中运行它?
  • @VivekBajpai 专用服务器

标签: javascript node.js webserver


【解决方案1】:

一般系统会尽量自己做,以最大限度地利用cpu。但是,如果您想针对特定的 CPU,您应该查看TaskSet。它设置了进程的亲和力。

还有几个有用的问题可以讨论同一主题。看看吧。

  1. Upstart: each process on different core Nodejs

  2. Node.js - targeting a cpu core

  3. Node.js on multi-core machines

  4. In AmazonEC2 cpu core and nodejs

  5. How to deploy Node.js in cloud for high availability using multi-core

  6. Multi node modlue to utilize cpu

还有一个模块,Cluster,对 CPU 利用率也非常有用。它让您可以分叉多个进程以将负载分配到多个内核。


更新


最后,我根据 OP 部署了类似的东西。


案例 1。


  1. 我有一个 8 核 cpu 的专用服务器。
  2. 我已经部署了一个单节点线程并使用集群模块来分担工作负载(正如pl47ypus所描述的那样PS:感谢他的回答)。
  3. 结果很好,但有时子线程可能会变得没有响应,所以我决定尝试我在之前的应用程序中使用的旧进程。

案例 2。


  1. 同一台服务器,我已经部署了8个不同端口的node.js进程。
  2. 然后我把 nginx 放在这些前面,用工作进程 8 监听端口 80。
  3. 结果比案例 1 最好,而且它非常容易配置 nginx ,也是最稳定的。

我还建议您尝试上述一些解决方案,并在每种情况下继续监控您的系统;比如 CPU、内存使用和 io。最后,从您的测试中,您将看到最适合您的用例的解决方案。每个应用程序都有自己的要求,因此最好尝试找到您的应用程序真正需要的内容。

【讨论】:

    【解决方案2】:

    试试这个:

    var cluster = require('cluster')
      , numCPUs = require('os').cpus().length;
    
    if(cluster.isMaster) {
      // Fork workers.
      for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
      }
    
      cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.pid + ' died');
      });
    
      return;
    }
    

    完整代码here

    还有,看here

    【讨论】:

    • 你有没有读过这个问题,它不是问如何在 nodejs 中进行多线程,而是问如何在不同的核心上运行不同的节点进程实例。那么使用集群有用吗?
    • 这是来自 nodejs api 文档的引用“集群模块允许您轻松创建所有共享服务器端口的进程网络。”你想通过同一个端口访问所有进程吗? (nodejs.org/api/cluster.html#cluster_cluster)
    • 首先集群模块是实验性的,在文档nodejs.org/api/cluster.html#cluster_cluster 开头的第二件事明确提到“节点的单个实例在单线程中运行。为了利用多核系统,用户有时会想要启动一个 Node 进程集群来处理负载”所以请务必清楚地阅读“这对于启动同一进程的多个实例以平衡负载非常有用”
    • 1) 您在回答中也提到了集群解决方案。 2) 尽管没有提到,但我们有理由相信我们谈论的是仅在多核上运行的同一个应用程序,这是集群的目的。
    • PS:集群模块现已稳定
    猜你喜欢
    • 2015-11-26
    • 2022-07-30
    • 2016-03-23
    • 2012-08-11
    • 2013-08-09
    • 2017-06-11
    • 2011-10-22
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多