„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Node.js mit dem Cluster-Modul skalieren

Node.js mit dem Cluster-Modul skalieren

Veröffentlicht am 04.11.2024
Durchsuche:536

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 untersuchen, wie Sie es effektiv nutzen können.

Warum Cluster?

  1. Alle CPU-Kerne nutzen
  2. App-Reaktionsfähigkeit verbessern
  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  {
    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. Worker_Threads für CPU-intensive Aufgaben verwenden
  2. Implementieren Sie eine ordnungsgemäße Fehlerbehandlung in Workern
  3. Überwachen Sie den Zustand der Mitarbeiter und starten Sie bei Bedarf neu
  4. Verwenden Sie einen Prozessmanager wie PM2 für die Produktion

Zu vermeidende Fallstricke

  1. Sharing-Server-Handles explizit (Node.js erledigt dies automatisch)
  2. Übermäßige Nutzung 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 verwendet werden. Führen Sie stets ein Profil durch, um sicherzustellen, dass es Ihre spezifischen Leistungsanforderungen erfüllt.

Prost?

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/sarvabharan/scaling-nodejs-with-the-cluster-module-5dm9?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3