A simple and light weight library to implement the cluster for your node apps.
- Simple and easy to use.
- Works for both express and native node servers.
- Auto restart workers during uncaught exception until reach the maximum limit of restart count.
- Displaying running cluster status. (i.e) Healthcheck, stats.
- Zero dependancy.
- Typescript supported.
To install the stable version:
Using npm as your package manager.
npm install --save simple-express-cluster
Using yarn as your package manager.
yarn add simple-express-cluster
const express = require('express');
const SimpleExpressCluster = require('simple-express-cluster').SimpleExpressCluster;
const simpleExpCluster = new SimpleExpressCluster();
const app = express()
const port = 3000
app.get('/', function (req, res) {
res.send('Hello World...!').end();
});
simpleExpCluster.run((worker) => {
console.log(worker.process.pid)
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
});
const express = require('express');
const SimpleExpressCluster = require('simple-express-cluster').SimpleExpressCluster;
const simpleExpCluster = new SimpleExpressCluster({ cpus:2, auto_restart: true, auto_restart_limit: 3 });
simpleExpCluster.on('output', (message) => console.log(message));
const app = express()
const port = 3000
app.get('/', function (req, res) {
res.send('Hello World...!').end();
});
simpleExpCluster.setExpress(app);
simpleExpCluster.run((worker) => {
console.log(worker.process.pid)
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
});
we can configure the default values by passing the config object to simple express cluster contructor
cpus
- Number of workers.auto_restart
- Restart the worker on the process exitauto_restart_limit
- Restart limit to avoid the round robin
{
cpus: 4, // defaults to os.cpus().length
auto_restart: false, // defaults to false
auto_restart_limit: 3 // defaults to 3
}
The run method will initialize cluster based on configuration. The current worker will be received in the argument callback itself.
simpleExpCluster.run((worker) => {
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
});
Note: Ensure that you have invoked the server listen
method in the callback method
Set the current express instance in simple express cluster. so that, the healthcheck and stats api will be attached in the given express instance.
simpleExpCluster.setExpress(app);
Note: The setExpress
method is only applicable for express servers.
Gives the cluster status
curl localhost:3000/cluster/healthcheck
> Simple express cluster is runnging...!
Gives the cluster stats. (i.e) Number of worker, worker process ids..etc.
curl localhost:3000/cluster/stats
> {"cluster_size":2,"master_process_id":32183,"cluster_status":"running","workers":[{"worker_id":2,"pid":32191,"status":"online"},{"worker_id":1,"pid":32190,"status":"exit","reason":"The worker died with exit code 0, and signal null"},{"worker_id":3,"pid":32209,"status":"online"}]}
A customer event to notify the verbose logs
simpleExpCluster.on('output', (message) => console.log(message));
This project is licensed under the MIT License - see the LICENSE.md file for details.