NodeJS Scaling - Working with clusters using PM2


In the real world, there are already many tools that we can use to help us manage clusters in production.  PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks. It will allow you to manage zero down time clusters in production. 



Using PM2:
1)      Install pm2 using command “sudo npm install -g pm2”. 

2)      Start an application to start any application ( Node.js, Python, Ruby, binaries in $PATH...) like that :
  $ pm2 start app.js

In app.js:

const http = require('http')
const options = [
    "Do it",
    "Don't do it"
]

const server = http.createServer((req, res) => {
    const randomIndex = Math.floor(Math.random() * options.length)
    const advice = options[randomIndex]
    const payload = JSON.stringify({
        processID: process.pid,
        advice
    })
    console.log(`advice from ${process.pid}: ${advice}`)
    res.writeHead(200, { 'Content-Type': 'application/json'})
    res.end(payload)
})

server.listen(3000)
console.log(`advice service running`)


3)      To list all running applications:
$ pm2 list

4)      To monitor logs, custom metrics, application information:
$ pm2 monit

There are already great tools out there that we can use. Also, cloud services like AWS or Roku, Cloud flair, or Azure have tools that manager clusters baked into their environments. It's important to know that sheer no JS websites at API will run in production on many instances and they never have to go down.