不同核心上的多个node.js实例

7
我希望设置4个不同的Node.js实例,每个实例都在自己的核心上运行。 Node.js是否会将新实例堆叠在同一核心上,还是会将它们设置在新的核心上?
这些实例是无关的并且单独接收请求。我希望CPU负载均匀分布。 我没有找到对这个问题的确定答案。

请问您能否提供一些关于您想要实现的场景的详细信息? - Vivek Bajpai
@VivekBajpai 我有4个Node.js服务器一直在运行,每个服务器在高峰期可能会承受重负。我认为在高峰期将它们分别设置到自己的核心上会有所帮助。 - GameDevGuru
你是在像EC2这样的虚拟服务器内运行它,还是专用的真实服务器上? - Vivek Bajpai
@VivekBajpai 专用服务器 - GameDevGuru
2个回答

7
一般情况下,系统会自行尝试最大程度利用CPU。然而,如果您想要针对特定的CPU进行操作,可以查看TaskSet。它可以设置进程的亲和性。

此外,还有一些有用的问题讨论了同样的主题,请查看。
  1. Upstart:将每个进程放在不同的核心上Nodejs

  2. Node.js-针对CPU核心

  3. 多核机器上的Node.js

  4. 在AmazonEC2 CPU核心和nodejs中

  5. 如何使用多核在云中部署高可用性的Node.js

  6. 多节点模块以利用CPU

还有一个模块Cluster,它也可以非常有用地利用CPU。 它允许您分叉多个进程以将负载分配到多个核心。


更新


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


案例1。


我有一台拥有8个CPU核心的专用服务器。 我部署了一个单节点线程,并使用了集群模块来分享工作负载(如pl47ypus所描述,感谢他的回答)。 结果很好,但有时子线程可能会变得无响应,因此我决定尝试我之前在应用程序中使用过的旧进程。

案例2。


  1. 在同一台服务器上,我部署了8个使用不同端口的node.js进程。
  2. 然后我在它们前面放置了nginx,在80端口监听并使用8个工作进程。
  3. 结果比第一种情况更好,而且配置nginx非常容易,也更加稳定。

我建议您尝试其中一些解决方案,并在每种情况下监视系统,例如CPU、内存使用和io。最终,通过测试,您将找到最适合您用例的最佳解决方案。每个应用程序都有自己的要求,因此最好尝试并找出您的应用程序的真实需求。


0

试试这个:

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;
}

完整代码请点击这里

另外,可以在这里查看


1
你读了问题吗?它不是在问如何在Node.js中进行多线程编程,而是在问如何在不同的核心上运行不同的Node进程实例。因此,使用集群技术是否有用呢? - Vivek Bajpai
这是来自Node.js API文档的一句话:“集群模块允许您轻松创建一个进程网络,所有进程共享服务器端口。” 您想通过同一端口访问所有进程吗?(http://nodejs.org/api/cluster.html#cluster_cluster) - pl47ypus
首先,集群模块是实验性的。其次,在文档http://nodejs.org/api/cluster.html#cluster_cluster的开头明确提到:“Node的单个实例在单个线程中运行。为了利用多核系统,用户有时会想要启动一个Node进程集群来处理负载。”因此,请仔细阅读这些内容,“它非常有用,可以启动多个相同进程的实例来平衡负载”。 - Vivek Bajpai
  1. 你在回答中也提到了集群解决方案。
  2. 即使没有明确提到,我们可以合理地认为我们正在谈论同一应用程序,只是在多核上运行,这就是集群的目的。
- pl47ypus
PS:现在集群模块已经稳定。 - kehers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接