Node.js Cluster Yapısı Oluşturma

Node.js'de küme modülü, sunucu bağlantı noktalarını paylaşan bir alt işlemler kümesi oluşturmanıza olanak tanır. Bu, birden fazla CPU çekirdeğinden yararlanarak bir Node.js uygulamasının performansını ve ölçeklenebilirliğini geliştirmek için kullanılabilir.

Cluster modülü, Node.js'de yerleşiktir ve modül istenerek ve yöntem cluster çağrılarak cluster.fork() kullanılabilir. Bu, ana işlemle sunucu bağlantı noktasını paylaşan yeni bir alt işlem oluşturur. Alt süreç daha sonra gelen istekleri işleyebilirken, üst süreç alt süreçleri yönetir ve gelen istekleri bunlar arasında dağıtır.

Küme modülünün kullanılması, bir Node.js uygulamasının birden çok CPU çekirdeğinden yararlanmasına izin vererek performansını ve ölçeklenebilirliğini iyileştirebilir. Ayrıca, alt işlemlerden biri çökse bile istekleri sunmaya devam etmesine izin vererek uygulamayı daha dayanıklı hale getirebilir.

Genel olarak küme modülü, Node.js uygulamalarının performansını ve ölçeklenebilirliğini geliştirmek için yararlı bir araçtır. Sunucu bağlantı noktalarını paylaşan ve gelen istekleri paralel olarak işleyebilen bir alt işlemler cluster oluşturmanıza olanak tanır.

Aşağıdaki yer alan örnekte, sunucunun portunu çocuk iş parçacıklarına paylaştırarak, çalışan Node.js sunucu kod parçası yer almaktadır.

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length; //çekirdek sayısı

if (cluster.isMaster) {
  // bütün çekirdekler için çocuk oluşturma
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();    //çocuk iş parçacığı oluşturma
  }

  //iş parçacığı çıkış yaptığında
  cluster.on('exit', (worker, code, signal) => {
      if (signal) {
        console.log(`iş parçacığı durduruldu: ${signal}`);
      } else if (code !== 0) {
        console.log(`İş parçacığı hatayla karşılaştı: ${code}`);
      } else {
        console.log('iş parçacığı çalışıyor');
      }
  });
} else {
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Merhaba Dünya\n');
  }).listen(3000);
}

Bu kod parçası sunucunun çekirdek sayısı kadar çocuk iş parçacığı oluşturup, 3000 portunu paylaşımlı olarak kullanacaklardır.

Tek çekirdek ve çok çekirdek kullanan sunucunun saniyede atılan istek sayılarına kaç adet cevap verdiğinin karşılaştırılması aşağıda verilmiştir. ( yüksek en iyisidir )

Eş Zamanlı Bağlantı Sayısı (connections 1 2 4 8 16
Tek Çekirdek (request/second) 654 711 783 776 754
8 Çekirdek (request/second) 594 1198 2110 3010 3020