Rumah  >  Artikel  >  hujung hadapan web  >  Menskalakan Node.js dengan Modul Kluster

Menskalakan Node.js dengan Modul Kluster

DDD
DDDasal
2024-09-19 22:30:03861semak imbas

Scaling Node.js with the Cluster Module

Modul Kluster membenarkan Node.js memanfaatkan sistem berbilang teras, meningkatkan prestasi apl. Mari kita terokai cara menggunakannya dengan berkesan.

Mengapa Kluster?

  1. Gunakan semua teras CPU
  2. Tingkatkan responsif apl
  3. Tingkatkan kebolehpercayaan melalui lebihan pekerja

Penggunaan Asas

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

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

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

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Workers can share any TCP connection
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello World\n');
  }).listen(8000);

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

Pengimbangan Beban

Node.js mengendalikan pengimbangan beban secara automatik menggunakan pendekatan round-robin.

Komunikasi Antara Proses (IPC)

if (cluster.isMaster) {
  const worker = cluster.fork();
  worker.send('Hi there');
} else {
  process.on('message', (msg) => {
    console.log('Message from master:', msg);
  });
}

Sifar Masa Henti Mulakan Semula

if (cluster.isMaster) {
  cluster.on('exit', (worker, code, signal) => {
    if (!worker.exitedAfterDisconnect) {
      console.log('Worker crashed. Starting a new worker');
      cluster.fork();
    }
  });

  process.on('SIGUSR2', () => {
    const workers = Object.values(cluster.workers);
    const restartWorker = (workerIndex) => {
      const worker = workers[workerIndex];
      if (!worker) return;

      worker.on('exit', () => {
        if (!worker.exitedAfterDisconnect) return;
        console.log(`Exited process ${worker.process.pid}`);
        cluster.fork().on('listening', () => {
          restartWorker(workerIndex + 1);
        });
      });

      worker.disconnect();
    };

    restartWorker(0);
  });
}

Amalan Terbaik

  1. Gunakan worker_threads untuk tugasan intensif CPU
  2. Laksanakan pengendalian ralat yang betul dalam pekerja
  3. Pantau kesihatan pekerja dan mulakan semula jika perlu
  4. Gunakan pengurus proses seperti PM2 untuk pengeluaran

Perangkap yang Perlu Dielakkan

  1. Pelayan perkongsian mengendalikan secara eksplisit (Node.js melakukan ini secara automatik)
  2. Menggunakan IPC secara berlebihan (boleh menjadi kesesakan)
  3. Mengabaikan menangani kemalangan pekerja

Modul kluster berkuasa untuk penskalaan mendatar, tetapi gunakan dengan bijak. Sentiasa membuat profil untuk memastikan ia menyelesaikan keperluan prestasi khusus anda.

Sekian?

Atas ialah kandungan terperinci Menskalakan Node.js dengan Modul Kluster. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn