`
ldb19890624
  • 浏览: 243604 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用NodeJS实现集群计算

 
阅读更多
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


分享到:
评论

相关推荐

    Node.js-Node.js的分布式计算框架

    Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,以其异步、非阻塞I/O模型而闻名,使得它在处理高并发场景时表现出色...然而,使用分布式计算也需要考虑数据一致性、容错性等问题,确保系统的稳定性和可靠性。

    nodejs实现远程监测系统,node性能监控,Node.js源码.zip

    在Node.js中,可以使用各种库(如Socket.IO)来实现实时通信,从而获取和发送遥测数据。这些数据可能包括硬件状态、应用程序性能指标等。 3. **性能监控组件**: 在Node.js中,有多个库可以帮助我们监控性能,例如...

    simple-clusterjs:简单的nodejs集群实现

    在Node.js环境中,为了充分利用多核处理器的优势,提高应用程序的性能和并发处理能力,我们可以使用内置的`cluster`模块创建一个“集群”(cluster)。"simple-clusterjs"项目就是一个简单的Node.js集群实现示例,...

    Nodejs-API-中文文档.pdf

    * 集群模块:提供了集群计算的实现 * Worker 类:提供了集群计算的工作单元 Domain * 域模块:提供了域的实现 * Domain 类:提供了域的访问和操作 Assertion * 断言测试模块:提供了断言测试的实现 * assert ...

    node-cluster:使用NodeJS集群模块来实现接近无停机的热重装的示例

    我们可以开始使用多核计算机来提高应用程序的吞吐量,同时仍然可以对这些计算机本身进行负载平衡以提高可靠性。无停机时间部署使您的应用程序在多个过程之间保持平衡,还可以部署代码,而无需重新启动整个应用程序...

    一个前端工程师眼里的NodeJS.docx

    总结来说,NodeJS的单线程模型虽然在CPU密集型任务上存在限制,但通过异步I/O、事件驱动编程以及子进程和集群技术,NodeJS能够有效地处理高并发的网络应用,并充分利用多核CPU资源。这种设计使得NodeJS特别适合于...

    深入理解NodeJS 多进程和集群

    “线程” 是程序执行流的最小单元,NodeJS 默认是单进程、单线程的,我们将这个进程称为主进程,也可以通过 child_process 模块创建子进程实现多进程,我们称这些子进程为 “工作进程”,并且归主进程管理,进程之间...

    NodeJS-PushServer

    NodeJS推送服务器v1 目标:实现在一台计算机上运行的套接字服务器。v2 客观的: 在多台机器上运行的套接字服务器的实现。...v2.2 使用集群模块在一台机器上构建一个nodejs集群(在cpu的不同内核上运行)。参考

    TippingComp:我的 Tipping Comp 的 NodeJs 微服务实现

    本项目"我的 Tipping Comp 的 NodeJs 微服务实现"旨在展示如何利用Node.js来创建一个微型应用程序,专注于处理小费计算或“Tipping Comp”的业务逻辑。 1. **Node.js基础**:Node.js是基于Chrome V8引擎的...

    hydra-cluster:Hydra计算集群项目

    总结来说,Hydra集群是一个使用SBC(如Raspberry Pi)、NodeJS和JavaScript构建的分布式计算系统,旨在提供一个低成本且易于管理的计算集群解决方案。开发者可以通过学习项目源代码,了解如何在Raspberry Pi上构建和...

    NodeJsScript:学习 nodeJs

    这个"NodeJsScript:学习 nodeJs"的资源可能是一个教程或者项目,旨在帮助初学者了解和掌握 Node.js 的基础知识和实际应用。 1. **JavaScript 基础**: 由于 Node.js 使用的是 JavaScript 语言,因此了解 JavaScript ...

    nodejs-cluster:利用节点集群的示例应用程序

    下面我们将详细探讨如何使用 Node.js 集群模块创建示例应用程序: 1. **初始化项目**:首先,创建一个新的 Node.js 项目。在命令行中,进入你的工作目录,然后运行 `npm init` 初始化一个新的 package.json 文件。 ...

    NodeJS 面试题及解答 (2023) – 高级.docx

    ### NodeJS 高级知识点详解 #### 一、Node.js 集群模块解析 **1. Node.js 集群模块概述** Node.js 的核心优势之一在于其高性能的事件循环机制,使得单线程模型能够高效处理大量并发请求。然而,这同样意味着无法...

    Jump Start Nodejs

    对于这类任务,通常推荐使用其他语言或Node.js的集群模块来进行处理。 总体来说,Node.js是一个功能强大且灵活的平台,适用于快速开发高性能的实时网络应用。对于希望学习服务器端JavaScript脚本编程的初学者而言,...

    软件体系结构案例-电商数据库-.pptx

    淘宝的数据中间层采用 MyFOX,使用 NodeJS 实现-transparent query,路由计算、数据装载、配置信息维护、监控报警等功能。MyFOX 可以实现数据查询取分片数据、合并计算缓存、路由、SQL 解析语义理解、查询路由字段...

    Nodejs性能分析优化和分布式设计1

    - 优化策略包括编写更适合V8引擎的代码,减少垃圾回收(GC)频率,使用多进程,结合原生C++模块,选择合适的模板,将复杂计算移到Java或C中,以及避免使用`eval`,合理使用定时器,减少基本操作,优化正则表达式,...

    集群安装文件说明

    Node.js中的`cluster`模块用于创建和管理子进程(worker processes),以实现负载均衡和提高性能。这通常被用来创建多线程或多进程的服务,充分利用多核CPU的优势。 - **Master进程**:一个Node.js进程可以作为...

    NodeJsMultiProcess:学习 NodeJs 中的多重处理

    为了解决这个问题,Node.js提供了`child_process`模块,允许我们创建子进程,每个子进程都有自己独立的内存空间和上下文,可以并行处理任务,从而实现多进程计算。这样,我们可以将CPU密集型任务分配给子进程,而...

    淘宝海量数据处理产品技术架构(精品).pptx

    MyFOX还实现了基于NodeJS的路由计算和监控报警功能,以应对高并发的查询需求。 对于冷数据,淘宝采取了低成本的存储方案,例如使用SATA硬盘的冷节点,以降低存储成本。而对于热数据,使用高性能的SAS硬盘和更多的...

    rentalx:Ignite NodeJS的编程方案

    Ignite NodeJS客户端库允许开发者在Node.js环境中与Ignite集群交互。这使得你可以利用Ignite的强大功能,如分布式数据存储、计算任务执行以及事件监听,同时利用Node.js的非阻塞I/O模型和丰富的生态系统来构建高并发...

Global site tag (gtag.js) - Google Analytics