Heim >Web-Frontend >js-Tutorial >Node.js mit dem Cluster-Modul skalieren

Node.js mit dem Cluster-Modul skalieren

DDD
DDDOriginal
2024-09-19 22:30:03890Durchsuche

Scaling Node.js with the Cluster Module

Das Cluster-Modul ermöglicht es Node.js, Multi-Core-Systeme zu nutzen und so die App-Leistung zu verbessern. Lassen Sie uns herausfinden, wie Sie es effektiv nutzen können.

Warum Cluster?

  1. Alle CPU-Kerne nutzen
  2. Verbessern Sie die Reaktionsfähigkeit der App
  3. Erhöhen Sie die Zuverlässigkeit durch Mitarbeiterentlassungen

Grundlegende Verwendung

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`);
}

Lastausgleich

Node.js übernimmt den Lastausgleich automatisch mithilfe eines Round-Robin-Ansatzes.

Interprozesskommunikation (IPC)

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

Neustarts ohne Ausfallzeiten

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);
  });
}

Best Practices

  1. Verwenden Sie worker_threads für CPU-intensive Aufgaben
  2. Implementieren Sie eine ordnungsgemäße Fehlerbehandlung in den Arbeitern
  3. Überwachen Sie den Gesundheitszustand der Mitarbeiter und starten Sie bei Bedarf neu
  4. Verwenden Sie einen Prozessmanager wie PM2 für die Produktion

Zu vermeidende Fallstricke

  1. Server-Handles explizit teilen (Node.js erledigt dies automatisch)
  2. Übermäßiger Einsatz von IPC (kann zu einem Engpass werden)
  3. Vernachlässigung der Bewältigung von Arbeitsunfällen

Das Cluster-Modul ist leistungsstark für die horizontale Skalierung, sollte aber mit Bedacht eingesetzt werden. Profilieren Sie immer, um sicherzustellen, dass es Ihre spezifischen Leistungsanforderungen erfüllt.

Prost?

Das obige ist der detaillierte Inhalt vonNode.js mit dem Cluster-Modul skalieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn