Mistercoding Logo

Membuat Multi Thread atau Cluster mode pada nest JS (10x lebih cepat)

, 2 min read

Node JS / Nest JS memiliki cara kerja Single Thread yang artinya hanya bisa menjalankan tugas satu persatu sehingga pada saat ada banyak tugas yang sedang di kerjakan harus bergantian beda dengan Multi Thread yang bisa menjalankan tugas secara bersamaan.

Node JS / Nest JS memiliki cara kerja Single Thread yang artinya hanya bisa menjalankan tugas satu persatu sehingga pada saat ada banyak tugas yang sedang di kerjakan harus bergantian beda dengan Multi Thread yang bisa menjalankan tugas secara bersamaan.


Kali ini kita akan membuat supaya aplikasi Nest JS menjadi lebih cepat dengan memaksimalkan Jumlah Core yang ada pada Komputer sehingga bekerja seperti Multi Thread atau Mode Cluster. semakin banyak jumlah Core pada komputer maka akan semakin banyak jumlah tugas yang bisa di kerjakan.


Kita hanya perlu menambahkan beberapa baris code di dalam main.ts seperti berikut:

import { NestFactory } from "@nestjs/core"
import { AppModule } from "./app.module"
const cluster = require("cluster")
const numCPUs = require("os").cpus().length

async function bootstrap() {
  const app = await NestFactory.create(AppModule)

  if (cluster.isMaster) {
    console.log(`Master ${process.pid} is running`)
    for (let i = 0; i < numCPUs; i++) {
      cluster.fork()
    }

    cluster.on("exit", (worker, code, signal) => {
      console.log(`worker ${worker.process.pid} died`)
    })
  } else {
    await app.listen(process.env.PORT || 3000)
    console.log(`Worker ${process.pid} started`)
  }
}
bootstrap()

benchmark Perbandingan Tanpa \ Menggunakan Cluster Mode



Pada gambar diatas disebelah kiri adalah dimana Nest JS tanpa menggunakan Cluster Mode dan di sebelah kanan adalah menggunakan Cluster Mode.

 

Tanpa Cluster Mode

179051 Request

 

Menggunakan Cluster Mode

814932 Request


Terlihat diatas perbedaanya cukup jauh dalam jumlah request dimana saya menggunakan WRK untuk mengetes request.

Tags

docker
nestjs
bull
tailwindcss
laravel
reactjs
nextjs
markdown
rust
apigateway
programmer
monorepo
jsonserver
messagebrocker
ratelimiter
microservices
statemanagement
localstack
cloudlocal
aws
s3cmd
loadtest
k6
redis
angular