用NodeJS实现集群计算

简介: Node的单个实例运行在单个的线程中,要充分利用多核系统,我们可以运行Node进程集群来处理负载。也就是说,如果系统有8核,单个Node实例只能使用其中1核,可以利用cluster包的workers概念来充分利用所有的核。
Node的单个实例运行在单个的线程中,要充分利用多核系统,我们可以运行Node进程集群来处理负载。

也就是说,如果系统有8核,单个Node实例只能使用其中1核,可以利用cluster包的workers概念来充分利用所有的核。有趣的是,它们可以共享同一个端口。

该模块还处于实验阶段。

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
 
if (cluster.isMaster) {
  // Fork workers.
  require('os').cpus().forEach(function(){
    cluster.fork();
  });
  // In case the worker dies!
  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
  // As workers come up.
  cluster.on('listening', function(worker, address) {
    console.log("A worker with #"+worker.id+" is now connected to " +\
     address.address +\
    ":" + address.port);
  });
  // When the master gets a msg from the worker increment the request count.
  var reqCount = 0;
  Object.keys(cluster.workers).forEach(function(id) {
    cluster.workers[id].on('message',function(msg){
      if(msg.info && msg.info == 'ReqServMaster'){
        reqCount += 1;
      }
    });
  });
  // Track the number of request served.
  setInterval(function() {
    console.log("Number of request served = ",reqCount);
  }, 1000);
 
} else {
  // Workers can share the same port!
  require('http').Server(function(req, res) {
    res.writeHead(200);
    res.end("Hello from Cluster!");
    // Notify the master about the request.
    process.send({ info : 'ReqServMaster' });
  }).listen(8000);
}

在一个4核的计算机上,输出如下:

Number of request served =  0
A worker with #2 is now connected to 0.0.0.0:8000
A worker with #4 is now connected to 0.0.0.0:8000
A worker with #1 is now connected to 0.0.0.0:8000
A worker with #3 is now connected to 0.0.0.0:8000
Number of request served =  0
...
Number of request served =  2
..
Number of request served =  4
...
Number of request served =  6


目录
相关文章
|
6月前
|
Kubernetes 网络协议 容器
k8s搭建集群报错汇总—202302【更新】
k8s搭建集群报错汇总—202302【更新】
|
7月前
|
JavaScript
nodejs服务器的运行
nodejs服务器的运行
209 1
|
3月前
|
Kubernetes Shell Docker
K8s集群v1.26.1版本的简单部署实践
K8s集群v1.26.1版本的简单部署实践
116 0
|
3月前
|
消息中间件 Kafka
Kafak - 单机/集群快速安装指北(3.x版本)
Kafak - 单机/集群快速安装指北(3.x版本)
43 0
|
分布式计算 前端开发 Hadoop
环境篇 ES 集群的配置|学习笔记
快速学习环境篇 ES 集群的配置
284 0
|
大数据 流计算 开发者
环境篇 ES 集群的测试|学习笔记
快速学习环境篇 ES 集群的测试
114 0
|
Java Linux
ES单机版和集群安装
ES单机版和集群安装
136 0
|
Kubernetes Linux 网络安全
k8s集群的搭建安装(V1.18.0)
k8s集群的搭建安装(V1.18.0)
k8s集群的搭建安装(V1.18.0)
|
JavaScript Ubuntu Shell
nodejs部署
nodejs部署
87 0
|
Kubernetes 负载均衡 前端开发
使用kubeadm的方式搭建k8s(1.18.2版本)高可用集群
使用kubeadm的方式搭建k8s(1.18.2版本)高可用集群