- Notifications
You must be signed in to change notification settings - Fork0
run multi-threaded node.js network applications using the native cluster module
License
npkgz/cluster-magic
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
run multi-threaded node.js network applications using the nativecluster module
- Run network applications within multiple processes multiplexed by node.js
- Easy to use, configless
- Standalone, no external process managers required
- Respawn dead/failed workers
- Gracefull application shutdown via
sigterm
- Hot-Reload/Hot-Restart via
sighup
- Delayed restart of failed processes to avoid infinite restart loops
$ npm install cluster-magic --save$ yarn add cluster-magic
A working snippet is available in theexamples directory. Just runnode examples/startup.js
File: startup.js
Initializes the cluster application
const_cluster=require('cluster-magic');const_app=require('./application.js');// start the clustered app (8 workers)_cluster.init(_app,{numWorkers:8});
File: application.js
Your socket based application which should be multiplexed
constnet=require('net');functionstartup(){constserver=net.createServer((socket)=>{// connections never end});server.listen(8000);}module.exports={// init hookinit:startup};
To hot-restart (zero downtime) an application, just send aSIGHUP to the master process.This spawns new workers and disconnects all current workers from thecluster-proxy
Example
# send SIGHUP to process 12345kill -HUP 12345
- SIGHUP Restart workers
- SIGTERM Gracefull application shutdown
- SIGINT Gracefull application shutdown
cluster-magic comes with as simple delayed-restart policy which suppresses infinite restart loops.
- In case a process dies, an internal counter will be incremented.
- If a threshold of10 is reached the process restart is delayed by
counter*200ms
to avoid infinite restart loops on internal application errors.Well..this is may not what you expect from a "clustered application" but such an error requires that amanual fix will take place by the operations team (_logger.alert event is triggerd whichSHOULD be observed) - The counter is decremented by 1 once per minute.
To specify the number of workers you can easily pass the environment variableNUM_WORKERS
to the nodejs process. Default is set tonum_cpus*2
cluster-magic is OpenSource and licensed under the Terms ofThe MIT License (X11) - your're welcome to contribute
About
run multi-threaded node.js network applications using the native cluster module