Node.js معروفة بسرعتها وكفاءتها، مما يجعلها خيارًا شائعًا لبناء تطبيقات عالية الأداء وقابلة للتطوير.
ومع ذلك، فإن Node.js عبارة عن خيط مفرد
، مما يعني أنه يعمل على نواة وحدة المعالجة المركزية (CPU) واحدة، وهو ما يمكن أن يكون محدودًا في بيئات الخوادم متعددة النواة. إذا كان تطبيقك يستهلك الكثير من الموارد أو كنت تتوقع حركة مرور عالية، فستحتاج إلى زيادة استخدام مراكز وحدة المعالجة المركزية (CPU) لخادمك إلى الحد الأقصى.
هنا يأتي دور تجميع Node.js.
في هذا المنشور، سنتعمق في
، وسبب أهميته، وكيف يمكنك استخدامه لتعزيز أداء تطبيقاتك.
ما هو تجميع Node.js؟
من خلال تجميع تطبيق Node.js الخاص بك، يمكنك:
الاستفادة من نوى وحدة المعالجة المركزية المتعددة
تتحكم في العديد من عمليات العاملة.
لا تتعامل العملية الرئيسية مع طلبات HTTP مباشرة ولكنها تدير العاملين الذين يقومون بذلك. يتم توزيع الطلبات المقدمة من العملاء عبر هؤلاء العمال، مما يؤدي إلى موازنة الحمل بكفاءة.
إذا تعطلت إحدى العمليات المنفذة لسبب ما، فيمكن أن تؤدي العملية الرئيسية إلى عملية جديدة، مما يضمن الحد الأدنى من وقت التوقف عن العمل.
متى يجب عليك استخدام التجميع؟
يواجه حركة مرور عالية ويحتاج إلى التعامل مع العديد من الطلبات المتزامنة
كيفية تنفيذ التجميع في 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. العمليات المنفذة:
3. التسامح مع الخطأ:
إذا تعطلت عملية عاملة، فسيتم تشغيل حدثcluster.on('exit')، ويتم إنشاء عامل جديد ليحل محل العامل الميت. الخطوة 3: اختبار التطبيق المجمع الخاص بك
الآن، إذا قمت بتشغيل التطبيق:
عقدة server.js
node server.js
ستلاحظ أنه تم إنشاء العديد من العمال، كل منهم بمعرف عملية فريد. يتم التعامل مع كل طلب بواسطة عامل مختلف، مما يؤدي إلى موازنة الحمل بشكل فعال.
يمكنك اختبار كيفية تحسين التجميع لأداء التطبيق الخاص بك عن طريق إرسال طلبات متعددة ومراقبة كيفية توزيع عبء العمل بين العاملين.
لذا، في المرة القادمة التي تقوم فيها بإنشاء تطبيق Node.js عالي الأداء، تذكر أن تفكر في التجميع!هذا كل ما في هذه المدونة! ترقبوا المزيد من التحديثات واستمروا في إنشاء تطبيقات مذهلة! ?✨
ترميز سعيد! ?
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3