发布于2026-07-08 阅读(0)
扫一扫,手机访问
说到Node.js的集群模式,其实核心目标很明确:让应用能真正“吃透”多核CPU的性能。毕竟Node.js默认是单线程的,跑在单核上总有种“明明有资源却用不上”的憋屈感。下面就是一套在Ubuntu上从零搭建集群模式的完整流程,包括代码和操作细节,关键步骤都配了示例。

先确保Ubuntu上已经装了Node.js,没装的话用下面这行经典命令搞定:
sudo apt update
sudo apt install nodejs npm
新建一个文件,比如叫app.js,里面写一个最朴素的HTTP服务器:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World\n');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
Node.js的cluster模块允许我们创建多个工作进程,这些进程能共享同一个端口。下面这个例子展示了如何利用它让应用跑满所有CPU核心——先判断当前进程是主进程还是工作进程,主进程负责fork,工作进程则各自启动服务:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World\n');
});
server.listen(3000, () => {
console.log(`Worker ${process.pid} started`);
});
}
终端里直接执行:
node app.js
想知道是不是真的起了多个进程?用netstat或lsof看一眼3000端口就知道:
sudo netstat -tuln | grep 3000
或者:
sudo lsof -i :3000
正常的话,你会看到多个进程同时在监听这个端口——没错,它们都是同一应用的不同实例。
cluster模块默认采用轮询(round-robin)算法来分配请求。如果业务场景特殊,需要自定义负载均衡策略?没问题,但默认方式在大多数场景下已经够用了。
生产环境里不可能只靠手工重启,所以需要工具来管理集群中的工作进程。pm2是这里的老面孔了,安装和使用都非常直接:
npm install pm2 -g
用pm2启动应用并自动根据CPU核心数创建对应数量的进程:
pm2 start app.js -i max
-i max这个参数就是关键——它会自动检测CPU核心数并启动相应数量的工作进程,省去手动fork的功夫。
按照这套流程操作,Node.js应用就能真正利用起Ubuntu服务器的多核能力,并发处理性能和可靠性都会上升一个台阶。当然,集群模式只是高可用的第一步,后续还可以结合反向袋里、日志、健康检查等手段进一步完善。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8