Articles of 集群计算

NodeJS集群:如何减less主人的数据?

我是新的nodejs,我想要的是从数据库和计算读取数据。为了使其更快,我使用nodejs集群模块。 有两个全局variables:pairMap和nameSet,我把这个作业分配给master进程中的worker,他们做一些计算工作(修改map和set,就像map-reduce一样) 然而, 似乎pairMap和nameSet没有被修改并且是空的。 (在doMasterAction中的代码) (另一个奇怪的是我控制数据,它做了修改,但最终,在主进程中返回到空)。 数据如下(我提取主要思想): const Promise = require('bluebird'); const cluster = require('cluster'); const numCPUs = require('os').cpus().length; const fs = Promise.promisifyAll(require('fs')) const utils = { mergeMap:(source,dest)=>{ for(let [key,value] of Object.entries(source)){ if(!dest.has(key)) dest.set(key,value); for(let [type,arr] of Object.entries(value)){ const final = new Set([…dest.get[key][type],…arr]) dest.get[key][type] = final; } } } } /** * key: name1@group.com||name2@group.com * […]

socket.io + redis – 幽灵套接字 – 可能吗?

我做了一个应用程序与node.js,socket.io,群集,redis和它运行8个进程。 每个进程有没有可能有一些幽灵套接字? 我的意思是sockets已经断开,但并不是每个进程都知道它,但仍然有它们。 我的应用程序在连接事件中向客户端发送在线计数(来自两个房间的套接字计数)。 并且每3秒发送一个叫做“HEAD”的进程,也对所有的套接字“在线计数”进行发送。 我为什么要告诉它? 当我在浏览器中连接到应用程序时,首先从8个进程中的一个获得“在线计数”,让它成为60,3秒后,我从HEAD进程获得“在线计数”,但是这是非常不同的数字。 所以我认为有些东西不通过Redis同步到进程。 可能吗?

如何使用socketio集群创buildnodejs?

我用nodejs,express和socketio编写了一个聊天应用程序。 它支持在一个房间聊天,并支持多个房间,而我把客户端数据保存在内存中,比如有全局variables房间 ,而且我存储这样的客户端数据。 var rooms = { "room1": [ {username: "user1", socket: user1Socket}, {username: "user2", socket: user2Socket}, ], "room2": [ {username: "user3", socket: user3Socket}, {username: "user4", socket: user4Socket}, ] } 但是集群中有多个服务器,客户端不知道连接到哪个服务器,因为这是负载均衡器的工作,那么就出现了一个问题,user1和user2应该在同一个房间里,但是他们可能是连接到不同的服务器.. 我该怎么办?

Gracefuly在Nodejs中处理exception

我正在使用nodejs为Web服务构build脱机caching系统。 基本上,它偶尔轮询Web服务的公共方法,并将数据caching在memcached中。 工作得很好。 但是,我希望它是防弹的,并能在任何未捕获的exception情况下生存下来,从而降低服务器的性能。 我已经阅读了各种不同的方法,我相信集群模块非常适合我的需要。 但是,我不会为了我的目的而使用所有的CPU核心,因为我只有1个线程正在运行并更新caching。 我将会使用它的唯一原因是为了优雅地杀死工人并轻松地换一个新工人 var memwatch = require('memwatch'), cluster = require('cluster'); if (cluster.isMaster) { console.log('start cluster with 1 workers'); cluster.fork(); cluster.on('exit', function(worker) { console.log('worker %s died. restart…', worker.process.pid); cluster.fork(); }); } else { var http = require('http'), app = require("./app.js"); http.createServer().listen(9000); app.init(); } process.on('uncaughtException', function (err) { console.error((new Date).toUTCString() + ' uncaughtException:', […]

将请求传递给特定的分叉节点实例

纠正我,如果我错了,但不可能启动同一端口上的多个HTTP服务器。 基于此,NodeJS集群可能会发生分裂。 因为我知道主人是什么把请求传给了一个分叉的工人。 什么工作由操作系统pipe理或者cluster.schedulingPolicy =“rr”为“循环”。 重点是: 每个工人都需要自己的记忆,所以你需要x倍多的记忆,其中x是工人的数量 。 但是,如果我喜欢从我的节点应用程序运行不同的(子)域,我也喜欢把一个in_memory数据库(例如一个简单的JSON文件)绑定到(子)域的不同部分。 OR基于像subdomain.example.tdl/resource1/whatever这样的subdomain.example.tdl/resource1/whatever 。 它不接缝是可能的。 无论是基于资源还是基于域。 在我看来,它应该是可能的,因为我可以通过不同的现有中间件基于请求对象(res.url)和资源(params)进行路由。 这样,就可以告诉主服务器将请求传递给特定的分叉实例。

Nodejs Expressjs群集适当的方法来群集app.js

有谁知道哪个是正确的方法来集群nodejs express应用程序,为什么? 选项A:应用程序实例创build一次,并在每个创build的叉上调用listen。 var app = require('express')(); if (cluster.isMaster) { //fork once per cpu for (var i = 0; i < numCPUs; i++) { cluster.fork(); } //if a worker is online cluster.on('online', function WorkerOnline(worker) { console.log('%s Worker is running on %s pid: ', new Date().toISOString(), worker.process.pid); }); //if a worker dies, log that and create […]

nodeJS中的并发安全短唯一整数ID生成

我有一个节点应用程序,我正在使用rethinkdb作为数据库。 id rethinkdb为每个文档生成的不是人类可读的,不适合现实世界的参考目的。 例如,我创build的每个用户都希望具有一个简短的整数ID,我可以用它来在现实世界中引用该用户。 我从数据库中得到的id不适合。 什么是并发安全的方式来生成一个短的唯一的整数ID?

node.js:来自主集群的控制

是否可以从主群集dynamic地打开/closuresredis订阅? 我问的原因是我只想一次订阅一个集群,但是如果集群不存在,我需要另一个订阅。 从根本上说,主集群是否可以通过api向分叉的集群发送消息?

有没有一种方法可以直接在nodejs中的两个集群员工之间进行通信?

我知道一个主人可以发送消息给工作人员去掌握,但有没有办法在nodejs集群中直接进行工人与工人的通信?

使用mesos在node.js中进行聚类

我正在与一个涉及服务器的Node.js一起工作。 现在由于大量的工作,我需要执行集群来在不同的服务器(不同的物理机器)之间划分工作。 请注意,我的工作与互联网无关,所以我不能使用无状态连接(或redis保持状态)和服务器前面的负载均衡器来分配连接。 我已经阅读了关于“集群”模块,但是据我所知,它似乎只在同一台机器上的多处理器上扩展。 我的问题:Node.js中是否有适合我的工作的分布式模块? 那么Apache mesos呢? 我听说mesos可以将多台物理机器抽象成一台服务器? 这是对的吗? 如果是的话,可以在mesos之上使用node.js集群模块,因为现在我们只有一个虚拟服务器? 谢谢