Articles of 群集计算

Node.js Cluster + Express总是调用同一个worker

我正在尝试使用群集模块来处理与Express同时多个http请求。 通过下面的代码,我可以产生多个工作人员,并让他们都在同一个端口上进行监听。 大的for循环是模拟Web服务器上的重负载。 我想看到的是,如果工作人员在第二个请求进入时正忙于处理一个http请求,则会调用另一个worker并处理该第二个请求。 相反,当我尝试使用curl发出多个请求时,所有请求都由一个工作人员顺序处理; 即使他们已经分叉,也没有其他的工人被调用过。 难道是我使用Express不正确? 提前致谢! var cluster = require('cluster'); if (cluster.isMaster) { var cpuCount = require('os').cpus().length; for (var i = 0; i < cpuCount; i += 1) { cluster.fork(); } } else { var http = require('http'), app = require('express')(); http.createServer(app).listen(31415, function () { console.log(process.pid + " listening on 31415"); }); app.get('/', […]

kue以“群集”模式多次处理预定作业

我已经设置了kue来运行Cluster模块,该模块为每个CPU核心提供了一个kue的subprocess。 当调度程序插入every键到redis时,一切似乎都是按顺序的 – every运行只有一个键集。 但是,当触发作业处理的时间到来时,所有subprocess(工作者)开始处理处理逻辑,这导致作业具有由单个“调度程序”条目触发的多个实例。 当以编程方式触发kue的新作业时,似乎不会发生此症状,使用kue API时也不会发生这种情况。 请指教。 主引导代码 var cluster = require('cluster'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { require('./init.js'); for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('online', function (worker) { console.log('Worker ' + worker.process.pid + ' is online'); }); cluster.on('exit', function (worker, code, signal) { console.log('Worker ' + […]

使用cluster和node-webworker构build高性能的node.js应用程序

我不是一个node.js主,所以我想对此有更多的观点。 我正在创build一个HTTP node.js Web服务器,它不仅能处理大量的并发连接,还能处理长时间运行的作业。 默认情况下,node.js在一个进程上运行,如果有一段代码需要很长时间才能执行任何后续连接,则必须等到代码结束之前连接的操作。 例如: var http = require('http'); http.createServer(function (req, res) { doSomething(); // This takes a long time to execute // Return a response }).listen(1337, "127.0.0.1"); 所以我想使用node-webworker库在单独的线程中运行所有长时间运行的作业: var http = require('http'); var sys = require('sys'); var Worker = require('webworker'); http.createServer(function (req, res) { var w = new Worker('doSomething.js'); // This takes a […]

如何在使用集群模块的Node.js应用程序中运行Cron Job?

我正在使用Node-cron模块来调度Node.js应用程序中的任务。 我也希望在使用核心集群模块的几个进程中运行应用程序。 在几个进程中运行应用程序最终将在每个进程中执行计划任务(例如,如果任务是发送电子邮件,则会多次发送电子邮件)。 与群集模块一起运行cron作业的最佳实践/可行方法是什么? 我应该创build一个单独的进程,只处理cron作业,不接受任何请求。 如果是的话,我怎样才能以正确的方式做到这一点?

如何正常重启NodeJS服务器?

目前,我的一个侧面项目的产品环境是一个git仓库,在这里我拉入一些代码,用Ctrl-C手工杀死服务器,然后手动重新启动。 我意识到这有很多错误的东西。 比如,如果一个用户还在做重要的事情,而且这个过程正在处理敏感数据,那么我又杀了谁? 当我使用节点v0.4.x时,有一个很好的集群模块可以在应用处于完全状态时正常重启服务器。 在v0.6.x中,集群模块被内置到节点中,但它确实是裸露的,并且没有优雅的重启能力。 任何人都知道我可以在v0.6.x中正常重启nodejs服务器吗?