介绍
众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们优雅地称之为V8引擎。无论是V8引擎还是后来的Node.js都是以单线程模式运行,因此在多核处理器系统中无法充分发挥其最大性能。
Node.js集群模块
幸运的是,Node.js为我们提供了集群模块,可以生成多个工作线程来共享同一个TCP连接。
它是如何工作的?
首先,Cluster将创建一个主线程,然后根据您指定的数量复制几个serverapps(也称为工作线程)。它通过IPC通道与工作线程进行通信,并使用内置的负载平衡来更好地处理线程之间的压力。负载平衡使用循环算法(也称为循环算法)。
当使用循环调度策略时,master接受()所有传入的连接请求,然后将相应的TCP请求处理发送给选定的工作线程(该线程仍通过IPC进行通信)。
那怎么用呢?
以下是一个基本示例:
var cluster=require(' cluster ');var http=require(' http ');var OS=require(' OS ');var numCPUs=os.cpus()。长度;if(cluster . ismaster){//master ://让我们为(var I=0;i numCPUsI){ cluster . fork();}} else { //Worker: //让我们生成一个HTTP服务器//(Workers可以共享任何TCP连接。//在这种情况下,它是一个HTTP服务器);RES . end(' hello world ');}).听(8080);}当然,您可以指定任意数量的工作线程。线程的数量不限于CPU内核的数量,因为它只是运行在CPU上的一个子线程。
如您所见,为了使它正常工作,您需要将代码封装到集群的处理逻辑中,并添加一些额外的代码来指定当线程挂起时如何处理它。
使用PM2的方法
内置集群
PM2包含了上述所有的处理逻辑,因此您不必对代码进行任何更改。我们将上述代码恢复到其原始形式:
var http=require(' http ');函数(req,RES){ RES . write head(200);RES . end(' hello world ');}).听(8080);然后在控制台上执行:
参数$ PM2 startapp . js-i4-I workers的数量用来告诉PM2以cluster_mode的形式运行你的应用(对应fork_mode),后面的数字表示要启动的worker线程的数量。如果给定的数字是0,PM2将根据您的CPU内核数量生成相应的工作线程。
让您的应用程序在任何情况下都保持运行
如果有任何工作线程挂起,不要担心,PM2会立即重启它。当然,您可以随时手动重启这些线程:
实时扩展集群
任何时候,如果需要增加工作线程数,可以通过PM2 scale app name n扩展集群,参数n指定工作线程数,用于增加或减少集群数。您还可以通过pm2 scale app 3指定要添加多少工作线程。
在产品环境中实现零停机更新
PM2的重装应用程序名称功能将依次重启所有工作线程。每个线程都将等到新线程创建后才被终止。因此,当您在生产环境中部署新代码时,服务器将保持连续运行。
GracefulReload可以达到同样的目的,只是它不会立即终止工作线程,而是通过IPC发送关闭信号,关闭所有当前连接并处理一些定制的任务,然后优雅地退出。比如下面的代码:
process.on('message ',function(msg){ if(msg===' shut down '){ close _ all _ connections();delete _ cache();server . close();process . exit(0);}});将PM2配置为自动启动
如果希望PM2在服务器重新启动后自动运行上一个应用程序,可以先通过pm2 start启动应用程序,然后执行以下命令:
Pm2保存这将在~/.pm2目录中生成一个dump.pm2文件,该文件描述了当前在pm2上运行的所有应用程序。然后执行以下命令:
Pm2启动【平台】注意,需要增加一个可选的参数平台,明确告知pm2当前的系统环境。这样,下次服务器重新启动时,PM2将自动运行以前保存的应用程序。
结论
集群模块非常强大,使用PM2会更容易。Cluster.js在Node 0.10.x时代只是一个实验性的产品,但是从Node 0.11.x开始逐渐成熟,准备正式发布,包括node 0.12.x的版本,强烈推荐使用Node.js和PM2的最新版本,这些产品的贡献者一直在努力让它们变得更好。
享受PM2带来的Node.js集群操作的便利!
原地址:https://keymetrics.io/2015/03/26/pm2-clustering-made-easy/
有关安装和使用PM2的更多信息,请查看此处的文档:http://pm2.keymetrics.io/docs/usage/quick-start/
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。