使用Node群集模块最常用的方法是什么?

时间:2014-04-01 04:43:16

标签: node.js cluster-computing load-balancing

节点集群提供了一种方便的方法来分叉子进程以平衡服务器负载,这遵循大多数操作系统中传统fork()系统调用的原理。在官方集群文档页面中,示例代码演示了主服务器与其工作服务器的不同之处,因为所有代码都驻留在同一文件中,所以这一点非常好。但在现实生活中,我发现文档不够详细,用户无法在不同情况下应用模块,例如,

  • server.listen()中“服务器”的含义是什么?只是一个HTTP服务器?
  • 开发人员应该如何仅将部分感兴趣的代码分叉为子进程,这些进程将在与任何其他代码相同的进程中运行? (更糟糕的是,子进程可能在工作进程和主进程之间共享状态依赖性?)
  • 工作进程如何通过任意数据相互通信?
  • 将子进程中的代码运行与主进程分开的最佳方法是什么,还是真的有必要?

任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

Node.js Cluster API docs提供了很好的例子。

简短的回答是Server.listen()是一个Node http服务器。 Cluster模块使用child_process.fork()方法,然后通过IPC使工作程序保持同步。

在文档的这个示例中,请注意主人永远不会调用server.listen()

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
} else {
  // Workers can share any TCP connection
  // In this case its a HTTP server
  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}