Ana içeriğe geç

Node.js Performans Artışı: Clustering ve PM2 ile Uygulama Ölçekleme

Bu rehberde ne öğreneceksiniz?

Bu rehberde Node.js uygulamalarını çok çekirdekli sistemlerde nasıl ölçekleyeceğinizi öğreneceksiniz.
Cluster modülü ile manuel ölçekleme yapacak, ardından PM2 ile süreci otomatikleştireceksiniz.
Son olarak yük testleriyle performans farkını net biçimde ölçeceksiniz.


🧠 Teknik Özet

Konu, Node.js uygulamalarında CPU kullanımını artırmaktır.
Problem, Node.js’in varsayılan olarak tek çekirdek kullanmasıdır.
Çözüm, cluster ve PM2 ile çoklu process çalıştırmaktır.


Ön Hazırlıklar

Devam etmeden önce şunlar gereklidir:

  • 4 veya daha fazla CPU çekirdeği (fiziksel veya Rabisu VDS)
  • Node.js ve npm kurulu ortam
  • Express.js temel bilgisi
  • Terminal kullanımına aşinalık

1. Node.js Neden Ölçekleme İster?

Node.js JavaScript kodlarını tek iş parçacığında çalıştırır.
Tüm istekler tek process üzerinden yürür.
CPU yoğun işlemler performansı ciddi şekilde düşürür.

Sonuçlar:

  • Yüksek gecikme süreleri
  • Process çökmesi riski
  • Kullanılmayan CPU çekirdekleri

2. Cluster Modülü Nedir?

Cluster, aynı uygulamadan birden fazla process üretir.
Her process farklı bir CPU çekirdeğinde çalışır.
İstekler round-robin algoritmasıyla dağıtılır.

Avantajlar:

  • Daha fazla eşzamanlı istek
  • Daha düşük yanıt süresi
  • Process çökse bile servis devam eder

3. Proje Kurulumu

mkdir rabisu-cluster-demo
cd rabisu-cluster-demo
npm init -y
npm install express
npm install -g loadtest pm2
  • Bu adımlar proje yapısını ve gerekli araçları hazırlar.

4. Kümeleme Olmadan Tek Process Uygulama


import express from "express";

const app = express();
const port = 3000;

console.log(`Worker PID: ${process.pid}`);

app.get("/heavy", (req, res) => {
let total = 0;
for (let i = 0; i < 5_000_000; i++) {
total++;
}
res.send(`Hesaplama sonucu: $&#123;total&#125;`);
});

app.listen(port, () => {
console.log(`Uygulama $&#123;port&#125; portunda çalışıyor`);
});
  • Bu kod CPU yoğun bir iş yükünü simüle eder.

5. Cluster ile Çok Çekirdek Kullanımı


import cluster from "cluster";
import os from "os";
import &#123; dirname &#125; from "path";
import &#123; fileURLToPath &#125; from "url";

const __dirname = dirname(fileURLToPath(import.meta.url));
const cpuCount = os.cpus().length;

cluster.setupPrimary({
exec: __dirname + "/index.js",
});

for (let i = 0; i < cpuCount; i++) {
cluster.fork();
}

cluster.on("exit", () => {
cluster.fork();
});
  • Bu kod CPU sayısı kadar worker başlatır.

6. Performans Karşılaştırması (Load Test)


loadtest -n 1200 -c 200 -k http://localhost:3000/heavy
  • Bu komut eşzamanlı trafik üretir.

Beklenen sonuçlar:

  1. Tek process: düşük istek/saniye

  2. Cluster aktif: 3–4 kat daha yüksek throughput

  3. Ortalama gecikme ciddi şekilde düşer


7. PM2 ile Otomatik Ölçekleme (Önerilen)


pm2 start index.js -i 0
  • Bu komut CPU sayısı kadar process oluşturur.

Avantajlar:

  1. Otomatik yeniden başlatma

  2. Log yönetimi

  3. Kesintisiz restart (zero-downtime)


8. PM2 Yönetim Komutları

KomutAçıklama
pm2 listÇalışan process’leri gösterir
pm2 restart appUygulamayı yeniden başlatır
pm2 reload appKesintisiz yeniden yükler
pm2 stop appUygulamayı durdurur
pm2 delete appUygulamayı siler

❓ Sıkça Sorulan Sorular

1. Veritabanı bağlantıları nasıl etkilenir? Her worker ayrı bağlantı açar. Connection pool ayarları buna göre yapılmalıdır.

2. Worker’lar RAM paylaşır mı? Hayır. Her process izoledir. Paylaşım için Redis gibi çözümler gerekir.

3. Bir worker çökünce ne olur? Cluster ve PM2 otomatik yenisini başlatır.

""4. Bu yapı Rabisu VDS’te çalışır mı?"" Evet. Çok çekirdekli Rabisu sunucularında idealdir.


Sonuç

Bu rehberde Node.js uygulamanızı ölçeklenebilir hale getirdiniz. Cluster ve PM2 ile donanım kaynaklarını tam kullandınız. Yük testleriyle performans farkını net biçimde gördünüz.

Ölçeklenebilir Node.js projelerinizi Rabisu Bulut altyapısında güvenle yayınlayabilirsiniz.