1

为什么集群模块只使用 1-2 个工作人员,而不是通过所有 12 个工作人员来平衡负载?网站统计:每天有 10000 名用户,不断有 100-200 名在线用户。我正在使用 nginx 和 pm2 来启动服务器。

截图:Ubuntu 14.04 顶级命令

我的代码:

let net = require('net'),
config = require('config'),
cluster = require('cluster'),
logger = require('packages/logger'),
os = require('os');

if(cluster.isMaster) {
let workers = [], workersCount = process.env.NODE_ENV === 'production' ? os.cpus().length : 4;
let spawn = function(i) {
    workers[i] = cluster.fork();
    workers[i].on('exit', () => {
        logger.error(`Worker ${i} is down`);
        spawn(i);
    });
};
for (let i = 0; i < workersCount; i++) {
    logger.debug(`Spawn worker №${++workers.length}`);
    spawn(i);
}
let worker_index = function(ip, len) {
    let s = '';
    for (let i = 0, _len = ip.length; i < _len; i++) {
        if (!isNaN(ip[i])) {
            s += ip[i];
        }
    }
    return Number(s) % len;
};
net.createServer({pauseOnConnect: true}, (connection) => {
    let worker = workers[worker_index(connection.remoteAddress, workersCount)];
    worker.send('sticky-session:connection', connection);
}).listen(config.default.http.port);

}else {
let server = require('config/server');
server = server.server;//just an express http server

process.on('message', (message, connection) => {
    if (message !== 'sticky-session:connection') {
        return;
    }
    server.emit('connection', connection);
    connection.resume();
});
}
4

0 回答 0