Though Many Programming language emerge,Javascript Becomes more Powerful Day by Day competing from Front End to back End server and Entering into Desktop apps and Mobile Apps.And becoming popular over GitHub and trending over the world.I have been looking for scaling my Node.js App instance.However it bacame famous by one of it's reason SINGLE THREADED and ASYNCHRONOUS I/O operations.So, now lets create some master and Worker for our Node.js Instance make it run for us in available Processors in Server/Cloud to Balance our Load and Scale Your Node.js Application even Faster.Our Ultimate Aim is to use the Multiple Processor for our App and Maintain a Stable state between Master and Slave Workers and Communication between them.
How Does it Works ?
Here we are creating a new Worker from master Cluster and working with the Workers,Generally you can fork process based on availability of processor.And if you like to fork even more,just Go through this Stackoverflow Thread.So,your Workers will handle your works automatically to load your balance.
Procedure :
we check it is master process or not and forking process as worker as do our specified operation to respond the client.
var cluster = require("cluster");
var cpu = require('os').cpus().length;
if (cluster.isMaster) {
console.log(cpu);
cluster.fork();
cluster.fork();
cluster.on('online', function(worker) {
console.log("Worker Started pid : "+ worker.process.pid);
});
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' stopped');
});
}
How to Scale Your Node.js App - Cluster API & Express with Benchmarking Siege |
Reference : Download
Prerequisites :
I would like to go through my previous articles on Basics of Node.js with Express Framework.- How to Install node.js and start working basics
- Working with Express framework node.js Basics
- Create/connect remote database (mongoDB)
How Does it Works ?
Here we are creating a new Worker from master Cluster and working with the Workers,Generally you can fork process based on availability of processor.And if you like to fork even more,just Go through this Stackoverflow Thread.So,your Workers will handle your works automatically to load your balance.
Procedure :
we check it is master process or not and forking process as worker as do our specified operation to respond the client.
var cluster = require("cluster");
var cpu = require('os').cpus().length;
if (cluster.isMaster) {
console.log(cpu);
cluster.fork();
cluster.fork();
cluster.on('online', function(worker) {
console.log("Worker Started pid : "+ worker.process.pid);
});
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' stopped');
});
}
Worker Process :
And with else you can write your application logic here to run with worker and respond to client.here you can notify the master thread with IPC and cmd.however we will do some basic operation over it.
else {
var express = require("express");
var app = express();
app.get("/",function(req,res){
console.log("request : "+cluster.worker.process.pid);
res.send("Welcome to Node.js Cluster API Demo from"+ cluster.worker.process.pid);
});
http.createServer(app).listen(3000);
}
Test with Siege :
Now lets test with Siege tool.Download it from here appropriate operating system install it or extract and use.
use the command as below with your own options to check out the efficiency for our small app.
C:\siege-windows>siege -t1M -c100 -d10s http://localhost:3000
** SIEGE 3.0.5
** Preparing 1500 concurrent users for battle.
With Cluster API node.js |
Without Cluster/Normal Node.js Single Threaded |
Further Functions:
You have lot of functions to do with worker and Events to do with Worker and Master and inter process communication is also possible to do Cluster module.Search through npm for more ready made cluster modules for your apt application in production.Check here below for reference guide
Note :
The main thing is to scale the application both Horizontally and vertically.this can be achieved not only by clusters,you can run it in seperate VM's for more scalling.I am too looking for such experience and article.
- Shared ideas for scalling application
- Node.js Cluster Documentation
- How to make NodeJs use More CPU Core or Multithreading Instead Single-thread
- Scaling a Node.js application to 10s of 1000s of simultaneous connections
Hope you Learnt Something quite useful.For Errors/Bugs/hugs/suggestion comment below or mail to s.shivasurya@gmail.com or connect with me in Facebook/Twitter/Linkedin/G+ hangouts.share is care.
nice post shivasurya.
ReplyDeletethank you! hope this would have introduced what is cluster in node.js!
ReplyDelete