"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > توسيع نطاق Node.js باستخدام وحدة الكتلة

توسيع نطاق Node.js باستخدام وحدة الكتلة

تم النشر بتاريخ 2024-11-04
تصفح:381

Scaling Node.js with the Cluster Module

تسمح الوحدة العنقودية لـ Node.js بالاستفادة من الأنظمة متعددة النواة، وتحسين أداء التطبيق. دعونا نستكشف كيفية استخدامها بفعالية.

لماذا الكتلة؟

  1. الاستفادة من جميع مراكز وحدة المعالجة المركزية
  2. تحسين استجابة التطبيق
  3. زيادة الموثوقية من خلال تكرار العمال

الاستخدام الأساسي

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

موازنة التحميل

يتعامل Node.js مع موازنة التحميل تلقائيًا باستخدام نهج دائري.

الاتصال بين العمليات (IPC)

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

إعادة التشغيل بدون توقف

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

أفضل الممارسات

  1. استخدام Working_threads للمهام التي تتطلب استخدامًا مكثفًا لوحدة المعالجة المركزية
  2. تنفيذ المعالجة الصحيحة للأخطاء في العاملين
  3. مراقبة صحة العامل وإعادة التشغيل إذا لزم الأمر
  4. استخدم مدير العمليات مثل PM2 للإنتاج

المزالق التي يجب تجنبها

  1. مشاركة مقابض الخادم بشكل صريح (يقوم Node.js بذلك تلقائيًا)
  2. الإفراط في استخدام IPC (يمكن أن يصبح عنق الزجاجة)
  3. إهمال التعامل مع أعطال العمال

وحدة المجموعة قوية للقياس الأفقي، ولكن استخدمها بحكمة. قم دائمًا بالملف التعريفي للتأكد من أنه يحل احتياجات الأداء المحددة الخاصة بك.

هتافات؟

بيان الافراج تم نشر هذه المقالة على: https://dev.to/sarvabharan/scaling-nodejs-with-the-cluster-module-5dm9?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3