Node JS Uygulamamızı Ölçeklendirme

Mevcut uygulama kodumuzu değiştirmeye gerek kalmadan PM2 ve cluster’ı kullanarak Node uygulamalarımızı artan trafik yükleri için nasıl kolayca ölçekleyebileceğimize bir göz atalım.

PM2

PM2 , Node.js uygulamaları’nı production ortamında ölçeklendirmeyi kolaylaştıran yerleşik bir load balancer’a sahiptir.

npm i -g pm2

Node JS

Node.js, V8 JavaScript motorunun üzerine kurulduğundan, bir thread kullanır. Bu nedenle uygulamanız tek bir thread üzerinde çalışır ve bu nedenle mevcut sistem kaynaklarını tam olarak kullanmaz.

Node.js Cluster Modülü:

Yukarıda tek bir thread’de çıkacak sorun için Node.js’deki cluster modülü bu sorunu çözülebilir.

//server.jsconst http = require("http");http.createServer((req, res) => {
res.writeHead(200);
res.end("server endpoint");
}).listen(8080);
//server.js

const http = require("http");
const os = require("os");
const cluster = require("cluster");

const cpuCores = os.cpus().length;

if (cluster.isMaster) {
let instance = 0;
while (instance < cpuCores) {
cluster.fork();
++instance;
}
} else {
console.log(`Child-process ${process.pid} started`);
http.createServer((req, res) => {
res.writeHead(200);
res.end("server endpoint");
}).listen(8080);
}
çalışan child processes’ler

Cluster Modülünü Kullanmanın Dezavantajları

Yukarıda ele aldığımız örnek oldukça basit, ancak bunda bile, child processes’ler beklenmedik bir şekilde sonlandırılmasını ele alma durumunu gözden kaçırdık.

PM2

PM2 dahili olarak Node.js cluster modülünü kullanır, ancak uç durumlar da dahil olmak üzere her şey bizim için işlenir ve bunu çalıştırmak için mevcut kodumuza dokunmamız bile gerekmez.

//server.js

const http = require("http");

http.createServer((req, res) => {
res.writeHead(200);
res.end("server endpoint");
}).listen(8080);
pm2 ecosystem
//ecosystem.config.js

module.exports = {
apps: [
{
name: "demo-app",
script: "server.js",
instances: 0,
exec_mode: "cluster",
watch: ".",
},
],
deploy: {
production: {
user: "YOUR_SSH_USERNAME_HERE",
host: "YOUR_SSH_HOST_ADDRESS",
ref: "YOUR_GIT_BRANCH_REF (eg: origin/master)",
repo: "GIT_REPOSITORY",
path: "YOUR_DESTINATION_PATH_ON_SERVER",
"pre-deploy-local": "",
"post-deploy":"npm install && pm2 reload ecosystem.config.js --env production",
"pre-setup": "",
},
},
};
  1. exec_mode: "cluster"PM2'ye kodu yürütmek için Node.js cluster modülünü kullanmasını söyler.
  2. instances:0bu 0 olarak ayarlandığında, PM2 otomatik olarak mevcut çekirdek sayısına eşit sayıda child processes oluşturacaktır. Exit olma durumlarında yeniden oluşturulacaktır.
  3. "post-deploy": "npm install && pm2 reload ecosystem.config.js -env production"Burada dikkat edilmesi gereken en önemli nokta , örneklerin birbiri ardına durdurulduğu ve en son değişikliklerle başlatıldığı sürekli bir deploymentpm2 reload yaklaşımını benimseyerek hiçbir şekilde uygulama down etmeden bir deployment yapacaktır .
pm2 start ecosystem.config.js
PM2 Clusters
pm2 start server.js -i 0

  Alıntı Yap

KARABAY A, 2022 . Node JS Uygulamamızı Ölçeklendirme,

https://www.karabayyazilim.com/blog/node-js-uygulamamizi-olceklendirme-2022-09-30-164120

(Erişim Tarihi : 30 Eylül 2022).


  Bu yazıyı paylaş

Yorumlar (119)

Yorum Yap

Abone Ol
Blog yazılarımdan ilk siz haberdar olmak için email bültenine kaydolun