引言
Node.js中的
cluster
模块允许您轻松创建共享服务器端口的子进程。这是一个核心模块,用于在Node.js应用程序中实现多进程架构,以充分利用多核CPU系统的计算能力。
cluster介绍
当您启动一个Node.js应用程序时,默认情况下它运行在单个进程中。对于多核CPU系统来说,这意味着您可能没有充分利用系统的全部潜力。通过使用cluster
模块,您可以启动一个主进程(通常称为“master”或“主”进程),它可以分叉多个工作进程(“workers”或“工作进程”),每个工作进程都是应用程序的一个实例,运行在自己的进程中。
主进程不负责处理实际的工作负载,而是负责监控和管理工作进程。例如,它可以根据需要创建新的工作进程或替换已经崩溃的工作进程。这样,即使某个工作进程崩溃,整个应用程序也可以继续运行。
cluster
模块的基本使用步骤如下:
- 引入
cluster
模块。 - 使用
cluster.isMaster
属性检查当前进程是否是主进程。 - 在主进程中,使用
cluster.fork()
方法创建工作进程。 - 设置必要的事件监听,以便于主进程可以响应工作进程的启动、退出等事件。
- 在工作进程中,编写实际处理客户端请求的代码。
使用cluster
模块的好处包括:
- 提高性能:通过在多个核心上并行运行,可以更有效地利用服务器的硬件资源。
- 提高可靠性:如果一个工作进程崩溃,它可以被新的工作进程替换,而不会影响其他工作进程或主进程。
- 负载分配:Node.js的
cluster
模块可以在工作进程之间自动分配连接,以实现负载均衡。
基础使用
使用 cluster
模块来创建一个能够处理多核 CPU 的服务器。
// 导入http和cluster模块
const http = require('http');
const cluster = require('cluster');
const numCPUs = require('os').cpus().length; // 获取CPU的核心数
if (cluster.isMaster) {
console.log(`主进程 ${
process.pid} 正在运行`);
// 衍生工作进程。
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`工作进程 ${
worker.process.pid} 已退出`);
});
} else {
// 工作进程可以共享任何TCP连接。
// 在本例中,它是一个HTTP服务器
http.createServer(