当前位置: 首页 > news >正文

Node.js项目开启多进程的2种方案

当node项目只部署一个单进程单实例时,遇到异常发生后程序会崩溃,此时杀掉进程在重启单这段时间会导致服务不能正常使用,这显然会影响用户体验。

所以需要以多进程的模式去部署应用,这样当某一个进程发生异常重启时,此时有其他请求被接受后,其他进程依旧可以对外提供服务,当然前提是你的应用不能够异常多的数不过来。

一、在Node.js应用中使用cluster模块

1、Cluster 核心机制

原理‌:主进程(Master)创建多个子进程(Worker),共享同一个 TCP 端口,Master 通过 Round-robin 算法分配请求。

优势‌:

  • 多核 CPU 利用率提升 200%~300%
  • 高并发场景下请求处理能力翻倍
  • 单个 Worker 崩溃时自动重启保障服务可用性

通过合理使用 Cluster 模块,可使 Node.js 应用的并发处理能力提升 3 倍以上。建议通过压力测试工具(如 autocannon)验证实际性能提升效果。

2、基础使用

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

// 主进程逻辑
if (cluster.isMaster) {
  console.log(`主进程 PID: ${process.pid}`);

  // 根据 CPU 核心数创建 Worker
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  // Worker 异常退出时自动重启
  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} 退出`);
    cluster.fork(); // 重新创建 Worker
  });

// Worker 进程逻辑
} else {
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('请求由 Worker ' + process.pid + ' 处理');
  }).listen(3000);

  console.log(`Worker 进程 PID: ${process.pid} 已启动`);
}

关键 API 

cluster.isMaster 判断当前进程是否为主进程
cluster.fork() 创建新的 Worker 进程(最多建议创建 CPU 核心数 × 1.5 个)[^4]
cluster.on('exit') 监听 Worker 退出事件
worker.process.pid 获取 Worker 的进程 ID

3、进阶用法 

<

相关文章:

  • C/C++的数据类型
  • 编程通用-配置文件的选择
  • Django从零搭建卖家中心登陆与注册实战
  • 为了四季度的盈利,李斌的换人还在继续
  • Java Stream深度解析 高阶技巧与性能优化实战
  • 高等数学同步测试卷 同济7版 试卷部分 上 做题记录 第三章微分中值定理与导数的应用同步测试卷 B 卷
  • C++中string库常用函数超详细解析与深度实践
  • Java数组初始化全解析:方式、场景与最佳实践
  • 嵌入式基础(二)ARM基础
  • 瑞幸微RK系列平台的YOLO部署(上篇)
  • Python学习笔记(列表)
  • 使用wpa_cli和wpa_supplicant配置Liunx开发板的wlan0无线网
  • idea的快捷键使用以及相关设置
  • mybatis--多对一处理/一对多处理
  • 数据库的种类及常见类型
  • L3-027 可怜的复杂度(纯暴力)
  • 供应链管理:供应链管理的边界
  • HTTP协议 --- 超文本传输协议 和 TCP --- 传输控制协议
  • 什么是端点日志监控
  • spark中,shuffle read和shuffle write的先后顺序是什么
  • 金科股份:因信披违规,公司及董事长、总裁、财务负责人等收到行政监管措施决定书
  • 首部关于民营经济发展的基础性法律,有何亮点?专家解读
  • 王毅谈金砖国家开展斡旋调解的经验和独特优势
  • 郭向阳任广东省公安厅分管日常工作副厅长(正厅级)
  • 排除燃气爆炸、人为放火可能,辽宁辽阳火灾事故起火原因正在调查
  • 中国人保一季度业绩“分化”:财险净利增超92%,寿险增收不增利