NodeJS Dynamic Cluster is a way to manipulate your cluster size via a simple API, provided
by this module. You will be able to resize the cluster with a simple curl localhost:8080/scale/X
instead of relaunch your application.
This module uses the native cluster module, with just some pepper.
It is dependant on Debug
only.
Please use the last version as the first (1.0.x and 1.1.x) use KoaJS.
Any help or hint will be appreciated.
Developed for the current LTS, 6.10.2
.
This module exposes some API via HTTP to control the cluster.
Gives you the current size
curl localhost:8080/scale
> {"status":"ok","data":4}
Scale the cluster to wanted :size
, only if the new size is >0
and not equal to current size.
curl localhost:8080/scale/10
> {"status":"ok","data":10}
curl localhost:8080/scale/0
> {"status":"ok","data":10} # current size is returned
curl localhost:8080/scale/-20
> {"status":"ok","data":10} # current size is returned
Returns info about the cluster' health. The health is OK if the current workers count equals the wanted cluster size.
curl localhost:8080/check
> {"status":"ok"}
Check example
folder for a quick example.
const cluster = require('node-dynamic-cluster');
cluster(workerStart, [masterCallback], options);
The function where your app code starts. A param with the worker id is passed to this callback by the main API.
function workerStart(id) {
const debug = Debug('node-dynamic-cluster:test:' + id);
http.createServer((req, res) => {
debug(`Ops.. Someone poked me..`);
res.end(`I'm ok, thanks. This is worker #${id} speaking`);
}).listen(8080, '0.0.0.0', () => {
debug(`listening on 8080`);
});
}
not mandatory
Called after the listen()
on the master is ready.
{
clusterSize: 4,
port: 8080,
maxSize: 64,
host: '0.0.0.0'
}
mandatory
How many workers to span up on boot. Defaulting to the number of CPU is a good choice.
const clusterSize = require('os').cpus().length
mandatory
The port the API will listen to.
This avoid to destroy your server spanning 10 thousand workers...
Not mandatory, defaults to 64
. A warning will appear if you pass a value greater than 64.
It is safe to ignore it, if you know what you are doing.
The host the API will listen to. Defaults to 0.0.0.0
. Useful for securing your app.
DEBUG=node-dynamic-cluster:*
# verbose
DEBUG=verbose:node-dynamic-cluster:*,node-dynamic-cluster:*.
npm test