Yükleniyor...

Cluster Modülü

Cluster Modülü, Node.js uygulamalarını çok çekirdekli işlemciler üzerinde ölçeklendirmek için kullanılan temel bir araçtır. Node.js tek bir iş parçacığında (single-threaded) çalıştığından, CPU yoğunluklu işlemlerde veya yüksek trafikli sunucularda performans sınırlamaları yaşanabilir. Cluster Modülü, Master ve Worker süreçleri oluşturarak aynı uygulamayı paralel şekilde çalıştırmamıza olanak tanır. Master süreci Worker’ları yönetir ve gelen istekleri dağıtarak yük dengelemesi sağlar.
Bu modül, yüksek trafikli web sunucuları, gerçek zamanlı API’ler ve CPU yoğun işlemler için kritik öneme sahiptir. Cluster kullanımı sırasında Node.js’in temel kavramlarını anlamak gerekir: doğru sözdizimi (syntax), veri yapıları, algoritmalar ve nesne yönelimli programlama (OOP) ilkeleri.
Bu eğitimde, Cluster Modülü ile Worker süreçlerini oluşturmayı, yük dengelemesini uygulamayı, hata yönetimini etkin şekilde yapmayı ve sistem kaynaklarını optimize etmeyi öğreneceksiniz. Ayrıca, Node.js uygulamalarını ölçeklenebilir ve hataya dayanıklı hâle getirme konusunda pratik bilgiler edineceksiniz.

Temel Örnek

text
TEXT Code
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
console.log(`Master PID ${process.pid} başladı`);

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

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker PID ${worker.process.pid} öldü. Yeniden başlatılıyor...`);
cluster.fork();
});

} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end(`Worker PID ${process.pid} yanıt verdi\n`);
}).listen(8000);

console.log(`Worker PID ${process.pid} başladı`);

}

Yukarıdaki örnekte cluster.isMaster kullanılarak süreç Master mı yoksa Worker mı kontrol edilir. Master süreci, CPU çekirdeği sayısına göre Worker süreçleri oluşturur. Her Worker HTTP isteklerini bağımsız olarak işler ve paralel çalışır. cluster.on('exit') olayı ile beklenmedik şekilde kapanan Worker’lar otomatik olarak yeniden başlatılır. process.pid her sürecin benzersiz kimliğini verir ve izleme işlemlerini kolaylaştırır. Bu temel örnek, Cluster Modülü’nün Node.js uygulamalarını paralel ve yüksek performanslı çalıştırmadaki rolünü gösterir.

Pratik Örnek

text
TEXT Code
const cluster = require('cluster');
const http = require('http');
const os = require('os');

class WorkerManager {
constructor() {
this.numCPUs = os.cpus().length;
this.workers = [];
}

start() {
if (cluster.isMaster) {
console.log(`Master PID ${process.pid} başladı`);
for (let i = 0; i < this.numCPUs; i++) {
this.createWorker();
}

cluster.on('exit', (worker) => {
console.log(`Worker PID ${worker.process.pid} öldü. Yeniden başlatılıyor...`);
this.createWorker();
});
} else {
this.createServer();
}
}

createWorker() {
const worker = cluster.fork();
this.workers.push(worker);
}

createServer() {
const server = http.createServer((req, res) => {
const start = Date.now();
while (Date.now() - start < 100) {} // CPU yoğun işlemi simülasyonu
res.writeHead(200);
res.end(`Worker PID ${process.pid} isteği işledi\n`);
});

server.listen(8000, () => {
console.log(`Worker PID ${process.pid} 8000 portunda dinliyor`);
});
}

}

const manager = new WorkerManager();
manager.start();

Bu gelişmiş örnekte WorkerManager sınıfı, Worker süreçlerini ve HTTP sunucularını yönetir. Master tüm Worker’ları izler ve herhangi biri beklenmedik şekilde kapanırsa yeniden başlatır. Worker’lar CPU yoğun iş yükünü simüle ederek paralel işlemeyi gösterir. Bu örnek, algoritmalar, hata yönetimi ve performans optimizasyonu uygulamalarını içeren Node.js için gerçek dünya kullanımını sunar.

Cluster Modülü ile ilgili en iyi uygulamalar ve yaygın hatalar:

  1. Worker sayısını CPU çekirdek sayısına göre ayarlayın.
  2. Beklenmedik kapanan Worker’ları izleyip yeniden başlatın.
  3. Paylaşılan kaynakları (DB bağlantıları) dikkatli yönetin.
  4. Worker’larda hata yönetimini uygulayın.
  5. Event loop’u bloklayan uzun senkron işlemlerden kaçının.
  6. IPC ve veri doğrulama ile güvenliği sağlayın.
    Bu uygulamalar, Node.js ile ölçeklenebilir ve güvenilir sistemler oluşturmak için kritik öneme sahiptir.

📊 Referans Tablosu

Node.js Element/Concept Description Usage Example
cluster.isMaster Sürecin Master olup olmadığını kontrol eder if (cluster.isMaster) { ... }
cluster.fork() Yeni Worker süreci oluşturur const worker = cluster.fork();
cluster.on('exit') Kapanan Worker’ı yeniden başlatır cluster.on('exit', (worker)=>{ cluster.fork(); });
process.pid Sürecin benzersiz kimliği console.log(process.pid);
http.createServer Her Worker’da HTTP sunucusu oluşturur http.createServer((req,res)=>{res.end('ok')}).listen(8000);

Cluster Modülü, Node.js uygulamalarını ölçeklendirme, süreçleri yönetme ve hata toleransı sağlama konusunda kritik bir araçtır. Öğrenilenler, Worker Threads, IPC optimizasyonu ve yük dengeleme gibi ileri düzey konulara geçiş için temel oluşturur. Node.js dokümantasyonu ve açık kaynak projeler, konuyu derinlemesine anlamak için ideal kaynaklardır.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

3
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek