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

قم بتجميع تطبيق Node.js الخاص بك للحصول على أداء أفضل

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

Node.js معروفة بسرعتها وكفاءتها، مما يجعلها خيارًا شائعًا لبناء تطبيقات عالية الأداء وقابلة للتطوير. ومع ذلك، فإن Node.js عبارة عن خيط مفرد
، مما يعني أنه يعمل على نواة وحدة المعالجة المركزية (CPU) واحدة، وهو ما يمكن أن يكون محدودًا في بيئات الخوادم متعددة النواة. إذا كان تطبيقك يستهلك الكثير من الموارد أو كنت تتوقع حركة مرور عالية، فستحتاج إلى زيادة استخدام مراكز وحدة المعالجة المركزية (CPU) لخادمك إلى الحد الأقصى. هنا يأتي دور تجميع Node.js.
في هذا المنشور، سنتعمق في

ما هو تجميع Node.js

، وسبب أهميته، وكيف يمكنك استخدامه لتعزيز أداء تطبيقاتك.

ما هو تجميع Node.js؟

تجميع Node.js هو أسلوب يسمح لك بالاستفادة من جميع مراكز وحدة المعالجة المركزية عن طريق إنتاج مثيلات متعددة (عاملة) لتطبيق Node.js الخاص بك.

يتشارك هؤلاء العاملون في نفس المنفذ ويتم إدارتهم من خلال عملية رئيسية. يمكن لكل عامل التعامل مع الطلبات الواردة بشكل مستقل، مما يسمح لتطبيقك بتوزيع عبء العمل ومعالجة الطلبات بالتوازي.


من خلال تجميع تطبيق Node.js الخاص بك، يمكنك:

الاستفادة من نوى وحدة المعالجة المركزية المتعددة
  • تحسين أداء التطبيق
  • توفير التسامح مع الخطأ في حالة تعطل عامل واحد
  • القياس أفقيًا دون المبالغة في تعقيد قاعدة التعليمات البرمجية
كيف يعمل التجميع؟

في مجموعة Node.js، هناك عملية

رئيسية

تتحكم في العديد من عمليات العاملة. لا تتعامل العملية الرئيسية مع طلبات HTTP مباشرة ولكنها تدير العاملين الذين يقومون بذلك. يتم توزيع الطلبات المقدمة من العملاء عبر هؤلاء العمال، مما يؤدي إلى موازنة الحمل بكفاءة. إذا تعطلت إحدى العمليات المنفذة لسبب ما، فيمكن أن تؤدي العملية الرئيسية إلى عملية جديدة، مما يضمن الحد الأدنى من وقت التوقف عن العمل.

متى يجب عليك استخدام التجميع؟

التجميع مفيد بشكل خاص عندما يكون تطبيقك:

يواجه حركة مرور عالية ويحتاج إلى التعامل مع العديد من الطلبات المتزامنة

    ينفذ المهام المرتبطة بوحدة المعالجة المركزية مثل تشفير الفيديو، أو معالجة الصور، أو تحليل البيانات على نطاق واسع.
  • يعمل على معالجات متعددة النواة لا يتم استخدامها بالكامل إذا كان تطبيقك يقضي الكثير من الوقت في انتظار عمليات الإدخال/الإخراج، مثل استعلامات قاعدة البيانات أو استدعاءات واجهة برمجة التطبيقات (API)، فقد لا يؤدي التجميع إلى تحسين الأداء بشكل ملحوظ.
  • في الحالات المذكورة أعلاه، يمكنك تحسين
  • الإنتاجية
باستخدام تقنيات البرمجة غير المتزامنة.

كيفية تنفيذ التجميع في Node.js

يوفر Node.js وحدة كتلة مدمجة لإنشاء مجموعات بسهولة. دعنا نستعرض مثالًا بسيطًا لكيفية تجميع تطبيق Node.js الخاص بك.

الخطوة 1: إعداد التطبيق الخاص بك

قبل إضافة التجميع، لنفترض أن لديك خادم HTTP بسيط (server.js):
const http = require('http'); خادم const = http.createServer((req, res) => { res.writeHead(200); res.end('Hello World\n'); }); server.listen(3000, () => { console.log("معرف عملية العامل: ${process.pid} يستمع على المنفذ 3000`); });

يعمل هذا التطبيق على نواة واحدة. دعونا نعدله لاستخدام التجميع.
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('Hello World\n');
});

server.listen(3000, () => {
  console.log(`Worker process ID: ${process.pid} is listening on port 3000`);
});

الخطوة 2: استخدام وحدة المجموعة

تسمح لنا وحدة المجموعة بتقسيم العملية الحالية إلى عمليات عاملة متعددة. إليك كيفية تنفيذ التجميع:
مجموعة const = require('cluster'); const http = require('http'); const os = require('os'); // احصل على عدد نوى وحدة المعالجة المركزية const numCPUs = os.cpus().length; إذا (cluster.isMaster) { console.log("معرف العملية الرئيسية: ${process.pid}`); // عمال الشوكة لكل نواة وحدة المعالجة المركزية لـ (دع i = 0؛ i { console.log("مات العامل ${worker.process.pid}. تم ​​إنشاء عامل جديد...`); block.fork(); }); } آخر { // يتشارك العمال في نفس اتصال TCP http.createServer((req, res) => { res.writeHead(200); res.end('مرحبًا من العامل'process.pid '\n'); }).listen(3000); console.log("معرف عملية العامل: ${process.pid}`); }

const cluster = require('cluster');
const http = require('http');
const os = require('os');

// Get the number of CPU cores
const numCPUs = os.cpus().length;

if (cluster.isMaster) {
  console.log(`Master process ID: ${process.pid}`);

  // Fork workers for each CPU core
  for (let i = 0; i  {
    console.log(`Worker ${worker.process.pid} died. Spawning a new one...`);
    cluster.fork();
  });
} else {
  // Workers share the same TCP connection
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello from worker '   process.pid   '\n');
  }).listen(3000);

  console.log(`Worker process ID: ${process.pid}`);
}

1. العملية الرئيسية: عندما تبدأ العملية، يتم التحقق مما إذا كانت العملية الرئيسية (cluster.isMaster). السيد هو المسؤول عن
عمليات العمل المتفرعة، واحدة لكل نواة وحدة المعالجة المركزية. يتم استخدام الأسلوب os.cpus() لاسترداد عدد مراكز وحدة المعالجة المركزية المتاحة. 2. العمليات المنفذة:

لكل نواة وحدة المعالجة المركزية، يتم تشعب عامل جديد (cluster.fork()). تعمل هذه العمليات المنفذة على تشغيل خادم HTTP والتعامل مع الطلبات الواردة.

3. التسامح مع الخطأ:

إذا تعطلت عملية عاملة

، فسيتم تشغيل حدثcluster.on('exit')، ويتم إنشاء عامل جديد ليحل محل العامل الميت. الخطوة 3: اختبار التطبيق المجمع الخاص بك

الآن، إذا قمت بتشغيل التطبيق:
عقدة server.js

node server.js

ستلاحظ أنه تم إنشاء العديد من العمال، كل منهم بمعرف عملية فريد. Cluster Your Node.js Application for Better Performanceيتم التعامل مع كل طلب بواسطة عامل مختلف، مما يؤدي إلى موازنة الحمل بشكل فعال.

يمكنك اختبار كيفية تحسين التجميع لأداء التطبيق الخاص بك عن طريق إرسال طلبات متعددة ومراقبة كيفية توزيع عبء العمل بين العاملين.

لذا، في المرة القادمة التي تقوم فيها بإنشاء تطبيق Node.js عالي الأداء، تذكر أن تفكر في التجميع!

هذا كل ما في هذه المدونة! ترقبوا المزيد من التحديثات واستمروا في إنشاء تطبيقات مذهلة! ?✨

ترميز سعيد! ?


بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/jagroop2001/cluster-your-nodejs-application-for-better-performance-2ckn?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3