Skip to content

Node.js Cluster 集群

Node.js 是单线程的,默认只用 1 个 CPU 核心。cluster 模块可创建多进程,充分利用多核 CPU。

基础用法

js
import cluster from 'node:cluster'
import http from 'node:http'
import { cpus } from 'node:os'

if (cluster.isPrimary) {
  // 主进程:fork 子进程
  const numCPUs = cpus().length
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork()
  }

  // 子进程挂了自动重启
  cluster.on('exit', (worker, code) => {
    console.log(`Worker ${worker.process.pid} 退出,重启中...`)
    cluster.fork()
  })
} else {
  // 子进程:启动 HTTP 服务
  http.createServer((req, res) => {
    res.end(`Worker ${process.pid}`)
  }).listen(3000)
}

进程间通信

js
// 主进程 → 子进程
if (cluster.isPrimary) {
  const worker = cluster.fork()
  worker.send({ msg: 'hello' })
} else {
  process.on('message', (msg) => console.log(msg))
}

PM2(生产环境推荐)

bash
npm install -g pm2

pm2 start app.js -i max       # max = CPU 核心数
pm2 list                       # 查看进程列表
pm2 monit                      # 监控面板
pm2 reload app                 # 零停机重载
pm2 logs                       # 查看日志

Cluster vs PM2

ClusterPM2
配置手写代码命令行
进程守护需手动处理自动守护+重启
日志手动自动收集
零停机重载手动实现pm2 reload
适用学习生产环境