976350
===========2015-06-30更新=========
更新内容: window, linux, Mac os已经测试完
本文原始链接 代码我托管在github上了,文章最后有链接 Nodejs不同版本负载均衡测试
做这个测试的原因
之所以做这个测试是因为,昨天听到同事说nodejs在0.10* 版本中的负载均衡没有达到预期的效果,他也做了他的测试 刚好这几天我自己也不怎么的忙,所以就去官网看了看关于cluster相关的API,于是就有了下面的内容。
测试思路
fork出子进程创建http服务器- 主进程监听子进程的发来的消息进行统计
- 主进程发起一定数量的
http请求, 请求完后进行统计
测试平台
window: 8.1
linux: 14.04.2
Mac OS: 10
实现代码
文件结构
|--clusterMode.js
|--req.js
clusterMode.js代码
var cluster = require('cluster');
var http = require('http');
var cpus = require('os').cpus().length;
if (cluster.isMaster) {
var workers = 0;
var workerObj = {};
var options = {
hostname: 'localhost',
port: 3050,
path: '/',
agent: false
}
console.log('master process start up...');
for (var i = 0; i < cpus; i++) {
cluster.fork();
}
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].on('message', function(pid) {
workerObj['process id: ' + pid] += 1;
});
})
cluster.on('listening', function(worker, address) {
workerObj['process id: ' + worker.process.pid] = 0;
console.log('worker process id: ' + worker.process.pid);
});
cluster.on('exit', function(worker, code, signal) {
console.log('worker: ' + worker.process.pid + ' died');
});
cluster.on('online', function(worker) {
workers +=1;
if (workers === cpus) {
setTimeout(function() {
var totalReq = 100;
var selfReq = require('./req');
console.log('requesting');
selfReq(options, totalReq, function() {
console.log('req end');
console.log('waiting for result...');
setTimeout(function() {
console.log(workerObj);
}, 2500);
});
}, 2000);
}
});
} else {
var server = http.createServer(function(req, res) {
process.send(process.pid);
res.end();
});
server.listen(3050);
}
req.js代码
var http = require('http');
module.exports = function(options, totalReq, cb) {
var finishReq = 0;
for(var i = 0; i < totalReq; i ++) {
(function(j) {
http.get(options, function(res) {
finishReq += 1;
if (finishReq === totalReq && typeof cb === 'function') {
cb();
}
}).on('error', function(e) {
console.log('error: ',e);
});
})(i);
}
}
windows测试结果
第一张图为node v0.10*版本测试结果

第二张图为node v0.11*版本测试结果

第三张图为node v0.12*版本测试结果

Linux测试结果
第一张图为node v0.10版本测试结果

第二张图为node v0.11版本测试结果
第三张图为node v0.12*版本测试结果

Mac OS 测试结果
第一张图为node v0.10版本测试结果
第二张图为node v0.11版本测试结果
第三张图为node v0.12*版本测试结果

测试总结
从这三个平台的测试结果可以看出,在windows平台上只有nodejs在v0.12后才达到了所 预期的负载均衡, 其余版本都不怎么理想。 而在linux和mac上,在nodejs v0.11版本就已经达到了负载均衡.
测试代码
最后
本文为原创,允许转载,但请保留此链接 http://www.itodo.me/u/p/detail/gxjo9TBvenx8q8NkB
文章文字叙述或者代码有不正确的地方欢迎指正. :)