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: ${total}`);
});
app.listen(port, () => {
console.log(`Uygulama ${port} 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 { dirname } from "path";
import { fileURLToPath } 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:
-
Tek process: düşük istek/saniye
-
Cluster aktif: 3–4 kat daha yüksek throughput
-
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:
-
Otomatik yeniden başlatma
-
Log yönetimi
-
Kesintisiz restart (zero-downtime)
8. PM2 Yönetim Komutları
| Komut | Açıklama |
|---|---|
pm2 list | Çalışan process’leri gösterir |
pm2 restart app | Uygulamayı yeniden başlatır |
pm2 reload app | Kesintisiz yeniden yükler |
pm2 stop app | Uygulamayı durdurur |
pm2 delete app | Uygulamayı 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.