Our vision-web
and vision-api
Express applications currently run in a single thread. In order to scale our application vertically, in order to take advantage of multi-core systems, and provide redundancy in case of failure, we can use the cluster module and spread the load over multiple processes. Lets add the Cluster module to vision-core ./lib/cluster/index.js
:
var cluster = require('cluster') , http = require('http') , numCPUs = require('os').cpus().length , logger = require('../logger'), function Cluster() {} Cluster.prototype.run = function(module){ if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { logger.info('Worker ' + worker.process.pid + ' died'), }); } else { require(module); } } module.exports = Cluster;
Let's export the cluster module out of vision-core
; by adding the following to ./index.js
:
module.exports.cluster = require('./lib/cluster'),
Let's change our Express application in vision-web
and vision-api ./app.js
, and add a third option for running our application, that is, running with cluster support:
switch (process.env['NODE_ENV']) { case 'COVERAGE': module.exports = require('./lib-cov/express'), break; case 'TEST': module.exports = require('./lib/express'), break; default: var Cluster = require('vision-core').cluster , cluster = new Cluster(); cluster.run(__dirname + '/lib/express'), break; }
3.145.101.192