Vertical scale with Cluster

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;
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.145.101.192