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
| Cluster | PM2 | |
|---|---|---|
| 配置 | 手写代码 | 命令行 |
| 进程守护 | 需手动处理 | 自动守护+重启 |
| 日志 | 手动 | 自动收集 |
| 零停机重载 | 手动实现 | pm2 reload |
| 适用 | 学习 | 生产环境 |