【问题标题】:Clustering http sever quandry when server on main and child processes当服务器在主进程和子进程上时集群http服务器quandry
【发布时间】:2012-04-01 00:59:20
【问题描述】:

鉴于以下 nodejs 代码。当我针对 localhost:8080 运行 ab(apache 基准测试)测试时,我只看到服务请求的主进程。但是,如果我从主进程中删除服务器的句柄,那么我会看到分叉的进程交换进出。有什么我不知道的充分理由吗?

var cluster = require('cluster');
var server = require('http').createServer(function(req,res){
   res.writeHead(200);
   var served = process.env.NODE_WORKER_ID || "master"; 
   console.log("hello world I was served by " + served);
   setTimeout(function () {
     res.end("hello world I was served by " + served);
   }, 1000);
});
if(cluster.isMaster){
  for(var i = 0; i < 2; i++){
     cluster.fork();
   }
 server.listen(8080);
}else{
  server.listen(8080);
}

【问题讨论】:

  • 小记。这是在 linux 机器上
  • 请仔细标记。这不是cluster-analysis 的问题,而只是经典的load-balancing。我猜它也可能更适合服务器故障。
  • @Anony-Mousse 不,这显然是 NodeJS 的问题,而不是服务器本身。

标签: node.js load-balancing


【解决方案1】:

因为 NodeJS 在 1-5 毫秒内处理每个请求,并且您的请求永远不会发送给任何子进程,因为主进程没有做任何事情,只是在睡觉。如果您针对数百个并发连接对其进行测试,您将看到集群带来的吞吐量增益。在这里,我做了一个最近的基准测试。 http://mustafaakin.wordpress.com/2012/03/19/nodejs-simple-clustering-benchmark/

您可以使用Apache Benchmark进行基准测试

【讨论】:

  • 我确实使用了 apache 基准测试。使用 3000 个请求和 150 个并发。使用上面的代码,请求永远不会命中分叉的进程。但是,如果您从主进程中删除服务器的句柄,它们就会开始跨进程切换。
猜你喜欢
  • 2011-05-17
  • 2015-10-07
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多