You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用cluster模块按CPU核数创建Worker是否需额外负载均衡

关于Node.js cluster模块负载均衡能力的解答

你当前的实现已经可以满足绝大多数单节点部署场景的需求,不需要额外引入负载均衡组件,仅在特定场景下需要叠加其他负载均衡组件。

现有实现的可用性说明

Node.js的cluster模块原生自带负载均衡调度能力,非Windows平台默认采用轮询策略,Windows平台采用IOCP调度策略,主进程会自动将收到的请求均匀分发到各个Worker进程。你按照CPU核心数创建Worker的逻辑刚好可以充分利用多核CPU的性能,规避Node.js单线程的性能瓶颈,同时你已经实现了Worker异常退出后自动重启的逻辑,单节点下的负载均衡能力和可用性已经达标。

你提交的实现代码如下:

const express = require("express");

const cluster = require("cluster");
const totalCPUs = require("os").cpus().length;

const PORT = process.env.PORT || 3000;

if (cluster.isMaster) {
  console.log(`Number of CPUs is ${totalCPUs}`);

  // Fork workers.
  for (let i = 0; i < totalCPUs; i++) {
    cluster.fork();
  }

  cluster.on("exit", (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
    console.log("Let's fork another worker!");
    cluster.fork();
  });
} else {
  const app = express();

  app.use(express.json());
  app.use(express.urlencoded({ extended: false }));

  // Route Calling
  const vehicleRoute = require("./routes/vehicle");

  app.use("/api", vehicleRoute);

  app.listen(PORT, () => {
    console.log(`[${process.pid}]App listening on port ${PORT}`);
  });
}

需要额外引入负载均衡组件的场景

  • 多节点集群部署:cluster模块仅能管理单台服务器上的进程,如果你需要部署多台应用服务器做水平扩容,需要在集群前置Nginx、HAProxy等负载均衡组件,将流量分发到不同的服务器节点
  • 需要额外流量管理能力:如果你需要实现HTTPS卸载、静态资源缓存、请求限流、WAF防护、会话保持、灰度流量切分等功能,cluster模块本身不支持这类能力,前置负载均衡组件可以快速实现相关需求
  • 特殊调度策略需求:cluster默认的调度策略如果满足不了业务需求,比如需要按IP哈希保证同一个用户的请求始终落到同一个Worker、按权重分配流量等场景,可以使用额外的负载均衡组件实现自定义调度
  • 超高并发场景:当单节点QPS极高时,cluster主进程的请求分发逻辑可能会成为性能瓶颈,前置反向代理负载均衡组件可以分担分发压力,提升整体吞吐能力

优化建议

如果当前业务为单节点部署、流量规模不大,现有代码完全可以正常运行,不需要做额外改造;后续业务规模上涨后,再按需叠加Nginx等负载均衡组件、扩展多节点部署即可。

内容的提问来源于stack exchange,提问作者Smit Gajera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:36:00