提问者:小点点

node.js集群--是否自动有一个负载均衡器?


我有一个带有8个逻辑处理器的4核CPU,在这段代码中,它创建了8个工作进程和1个主进程。当形成套接字连接时,它倾向于连接到最后一个工作器CPU8。使用此方法是否会自动添加负载平衡器,还是需要添加它?是否有方法测试负载平衡器是否工作?我尝试添加100个客户端,但它们都连接到CPU8-不确定是否可能,因为在这个实例中几乎没有任何进程处理

简单Node.js集群

const os = require('os'),
  cluster = require('cluster'),
  cores = os.cpus();
var clusterCount = 0;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);
  // Fork workers
  for (let i = 0; i < cores.length; i++) {
    cluster.fork();
  }
  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
}
else {
  const http = require('http'),
    express = require('express'),
    socketio = require('socket.io'),
    process = require('process');;

  var cpu = cores[clusterCount];
  var app = express();
  var port = process.env.PORT || process.argv[2] || 8080;
  var server = app.listen(port);
  var io = socketio(server);

  io.adapter(socketioRedis({ host: config.redis_host, port: config.redis_port }));

  io.on('connection', (socket) => {
    console.log(`User ${socket.id} connected to worker ${process.pid}`);
  });

  console.log(`Worker ${process.pid} started on port: ${port} | ${cpu.model}`);
  clusterCount++;
}

共1个答案

匿名用户

这取决于几点。https://nodejs.org/api/cluster.html#cluster_how_it_works

使用此方法是否会自动添加负载均衡器?

主机将处理负载平衡。

sure if it could be because there is barely any process handling in this instance

这可能是CPU 8不是那么忙,仍然可以处理负载。有两种策略也取决于您使用的操作系统。