为什么非集群应用程序在nodejs中胜过集群应用程序?

时间:2017-05-18 10:42:20

标签: javascript node.js

很多人说群集模块使node.js应用程序比常规应用程序更快。但我在这里遇到的是某种令人困惑的。我创建了两个脚本,第一个是不使用集群模块的常规http服务器。第二个脚本是使用集群模块的http服务器。

我正在使用apache基准来向这些服务器发送高请求。以下是结果:

Attempt#1:
non-cluster: 15,418 req/sec
cluster: 10,333 req/sec

Attempt#2:
non-cluster: 12,563 req/sec
cluster: 9,874 req/sec

非群集脚本如何胜过群集脚本?

这是脚本的github repo

非群集脚本:

const http = require('http');

const server = http.createServer((req, res) => {
  res.end('Hello World!');
});

server.listen(process.env.SERVER_PORT, () => {
  console.log('Server started on port ' + process.env.SERVER_PORT);
});

群集脚本:

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
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello World!');
  }).listen(process.env.SERVER_PORT);

  console.log(`Worker ${process.pid} started`);
}

我的节点版本在Ubuntu 16.04上是7.10。

1 个答案:

答案 0 :(得分:0)

我尝试在群集脚本

上将调度策略设置为SCHED_NONE
cluster.schedulingPolicy = cluster.SCHED_NONE

现在,群集脚本不断超越非群集脚本。 yeeah