- Spurtcommerce
-
- 0pensource performance
-
-
Load Balancing
موازنة تحميل قاعدة البيانات
تعرف على سلوك Spurtcommerce خلال أوقات الذروة
قام الفريق باختبار التطبيق بشكل شامل لمعرفة مدى كفاءته في التعامل مع حركة المرور الكثيفة والطلبات المتعددة
قد يكون توسيع تطبيق Node أمرًا معقدًا إلى حد ما. إنه بالتأكيد ليس بالأمر السهل. يتطلب خبرة واسعة، سواء من حيث المعرفة الدقيقة بـ Node أو الذكاء في إدارة الموارد. لتوسيع التطبيق، يمكننا استخدام التوسعة الرأسية أو الأفقية أو كليهما. إلى جانب ذلك، هناك عوامل أخرى يجب أخذها بعين الاعتبار لتحسين أداء Node، مثل استخدام وضع "العنقود" أو "الخيوط العاملة"، وسنركز هنا على وضع العنقود (Cluster Mode) الذي تم اعتماده في Spurtcommerce.
يُستخدم وضع العنقود لتشغيل نسخ متعددة من Node، وكل نسخة تُشغّل الخادم بداخلها. وكما نعلم، فإن حلقة الأحداث في Node.js تعمل بخيط واحد، ولا يمكننا جعلها تعمل بخيوط متعددة، ولكن من خلال تشغيل نسخ متعددة نحصل على نسخ متعددة من حلقة الأحداث، ما يجعلها تعمل بطريقة مشابهة لتعدد الخيوط.
عندما نكتب كود Node.js يستغرق وقتًا في التنفيذ، فإن الخادم بالكامل يتوقف عن استقبال الطلبات الجديدة حتى يتم الانتهاء من الطلب الحالي، مما يؤدي إلى تراكم الطلبات وتأخير الاستجابة.
وهنا يأتي دور العنقود لحل هذه المشكلة
يتيح لنا العنقود في Node.js إنشاء عمليات منفصلة يمكنها مشاركة نفس منفذ الخادم. وهذا يسمح بالاستفادة من جميع الأنوية المتوفرة في الجهاز. يتم توزيع التطبيق على جميع الأنوية. وإذا توقف أحد الخوادم، يتولى الآخر العمل بدلاً منه. حتى في حالات الازدحام الشديد، يقوم Node تلقائيًا بتوزيع الحمل باستخدام الموارد المتاحة. يتم إنشاء عملية رئيسية تُعرف بـ "مدير العنقود".
دور مدير العنقود:
- يتولى مراقبة وتتبع حالة كل نسخة من التطبيق يتم تشغيلها في نفس الوقت.
- يمكن لمدير العنقود تشغيل وإيقاف النسخ، وإرسال البيانات، والقيام بمهام إدارية أخرى لإدارة الموارد.
خادم Node ذو خيط واحد

خادم Node متعدد الخيوط (باستخدام العنقود):

بعد ملف app.js، يُعتبر مدير العنقود أول نسخة من Node. وهو المسؤول عن استقبال الطلبات وإنشاء نسخ العمال. يستخدم مدير العنقود وحدة "Cluster" من مكتبة Node القياسية. باستخدام دالة "fork"، يتم تنفيذ app.js مرة أخرى لبدء نسخة جديدة من العامل.
const cluster = require('cluster’); // cluster is a standard library module.
console.log(cluster.isMaster); //It return false for the first time.
يكون لدى مدير العنقود خاصية "Master" وتكون قيمتها true. وعند تنفيذ fork، يتم تشغيل app.js مرة أخرى ولكن كنسخة عامل (Worker) وليس مدير. يمكننا إنشاء عدة نسخ باستخدام cluster.fork() بحسب عدد الأنوية المتوفرة في الجهاز.
const cluster = require('cluster');
if (cluster.isMaster) {
cluster.fork();
cluster.fork();
cluster.fork();//You can create multiple instances according to the // cores available on your system.
} else {
const express = require('express');
const app = express();
app.get('/', (req, res)=>{
res.send('Hello');
});
app.listen(3000);
}
إذا كان لدينا مسارات تتطلب معالجة طويلة، وأخرى تتطلب وقتًا قصيرًا، يمكننا استخدام العنقود لتشغيل نسخ متعددة من الخادم بحيث تتعامل كل نسخة مع نوع مختلف من الطلبات.
بهذه الطريقة، قمنا في Spurtcommerce، باستخدام Node clustering لتحسين أداء تطبيق التجارة الإلكترونية.