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

Menskalakan Node.js dengan Modul Kluster

DDD
Lepaskan: 2024-09-19 22:30:03
asal
893 orang telah melayarinya

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`);
}
Salin selepas log masuk

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);
  });
}
Salin selepas log masuk

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);
  });
}
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan