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('....