使用集群的Node.js性能

我一直在试图弄清楚这一点。 我在节点上写了一个非常简单的http服务器来衡量使用集群的效果。 这是我的代码:

var cluster = require('cluster'); var http = require('http'); var numCPUs = 0; //require('os').cpus().length; if(process.argv.length >= 3) { numCPUs = process.argv[2]; } if (cluster.isMaster && numCPUs > 0) { console.log("launching " + numCPUs + " procs"); // Fork workers. for (var i = 0; i < numCPUs; i++) { console.log("launching proc #" + i); cluster.fork(); } cluster.on('death', function(worker) { console.log('worker ' + worker.pid + ' died'); }); } else { // Worker processes have a http server. http.Server(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(3000); } 

问题是,我没有看到任何性能增益。 1过程大部分时间都有更好的performance。 而且,如果我添加更多的工作,比如从redis或mongo中获取数据,那么增加这些stream程是有帮助的,但这只是适度的(大约15%)。 我已经在一个i7 MBPr(带有HT的四核)以及一个i5(四核)Win7系统上尝试过这两个方法,结果相同。

有人可以解释这个代码有什么问题吗? 或者,为什么我在使用集群时看不到优势/好处?

您的testing似乎几乎是纯粹的I / O导向,在这种情况下使用cluster提供的好处很less(正如您所见),因为I / O是并发的。

要看到显着的好处,你需要有一部分代码是CPU绑定的,因为只有这样你才能在你的集群工作者之间提供额外的并行性。