Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?

那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。

Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?


当前回答

可以使用纯TCP负载均衡器(HAProxy)将NodeJS扩展到多个盒子,每个盒子运行一个NodeJS进程。

如果你有一些共同的知识在所有实例之间共享,你可以使用一个中央Redis存储或类似的,然后可以从所有流程实例访问(例如从所有盒子)

其他回答

集群模块允许您利用机器的所有核心。事实上,您可以使用非常流行的进程管理器pm2,在不修改代码的情况下,仅用两个命令就可以利用这一点。

npm i -g pm2
pm2 start app.js -i max

一种方法是在服务器上运行多个node.js实例,然后在它们前面放置一个负载均衡器(最好是非阻塞的,如nginx)。

如上所述,Cluster将在所有核上扩展和负载平衡你的应用程序。 添加如下内容

cluster.on('exit', function () {
  cluster.fork();
});

将重新启动任何失败的工作。

现在,许多人也更喜欢PM2,它为您处理集群,还提供了一些很酷的监视特性。

然后,在运行集群的几台机器前添加Nginx或HAProxy,你就有了多级故障转移和更高的负载能力。

我搜索了Clusterize一个应用程序所有可用的CPU内核,并在这里找到了我自己。我在哪里找到这个关键字是Pm2命令

pm2的例子

这是我的发现

Clusterize一个应用到所有可用的CPU内核: $ pm2 start -i Max

如果需要安装pm2,请使用这些命令

npm install -g pm2

yan add -g pm2

or

使用这里的链接

你可以在多个核上运行你的node.js应用程序,通过使用集群模块和os模块的组合,可以用来检测你有多少cpu。

例如,假设你有一个服务器模块,它在后端运行简单的http服务器,你想在几个cpu上运行它:

/ /依赖性。 Const server = require('./lib/server');//这是我们的定制服务器模块。 Const cluster = require('cluster'); Const OS = require(' OS '); //如果我们在主线程上,启动fork。 if (cluster.isMaster) { // Fork进程。 对于(设I = 0;I < os.cpus().length;我+ +){ cluster.fork (); } }其他{ //如果我们不在主线程上,启动服务器。 server.init (); }