Heim > Web-Frontend > js-Tutorial > Hauptteil

Node.js mit dem Cluster-Modul skalieren

DDD
Freigeben: 2024-09-19 22:30:03
Original
860 Leute haben es durchsucht

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`);
}
Nach dem Login kopieren

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);
  });
}
Nach dem Login kopieren

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);
  });
}
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!