تعلّم كيفية التعامل مع أعطال الخادم والحركة المرورية العالية باستخدام PM2. عزّز تطبيقات Node.js بسهولة من خلال إدارة العمليات، والتعافي الذاتي، والتوسع، والمراقبة، والتسجيل.
تعرّف على جو.
جو مطور Node.js أنشأ للتو تطبيق ويب رائعًا. استضاف جهازًا افتراضيًا، وشغّل التطبيق باستخدام node app.js، وأعدّ لنفسه مشروبًا، وجلس ليستقبل المعجبين السعداء.
مرت بضع ساعات، وبدأ العملاء بالشكوى. لم يعد الخادم يستجيب.
يفتح جو الجهاز الافتراضي، ويجد أن Node.js لم يعد يعمل. لا مشكلة: يشغّل node app.js من جديد ويعود التطبيق للعمل.
تمر بضع ساعات أخرى وتتكرر المشكلة نفسها. كان كل شيء يعمل بشكل جيد على localhost، لكن الحركة المرورية العالية تجعل الخادم يتصرف بشكل غير متوقع في بيئة الإنتاج. ماذا يمكن لجو أن يفعل؟
تعرّف على PM2: مدير العمليات لـ Node.js
يعزّز مدير العمليات تطبيقات Node.js من خلال إتاحة:
- مراقبة الخدمات قيد التشغيل محليًا وفي بيئة الإنتاج
- تنفيذ مهام إدارة النظام مثل بدء وإيقاف التطبيقات دون توقف
- تسجيل المقاييس
- موازنة الحمل
البدء مع PM2
للبدء، أنشئ خادمًا بسيطًا باستخدام Express.js.
npm init -y
npm install expressبعد إعداد الحزم الأساسية، أنشئ ملف app.js والصق فيه الكود التالي:
const app = require("express")();
app.get("/", (req, res) => {
res.send("hello world");
});
app.listen(3000, () => {
console.log("Server started on port 3000!");
});PM2 هي حزمة NPM تُثبَّت بشكل عام على النظام:
npm install -g pm2
pm2 start app.js
لاحظ أننا لا نحصل على السجل مطبوعًا كما يحدث عادة عند تشغيل node app.js. علاوة على ذلك، يُخرجنا PM2 من الحلقة طويلة الأمد. إذا انتقلت إلى localhost:3000، يمكنك التحقق من أن الخادم يعمل.
الخادم يعمل الآن في الخلفية.
إدارة العمليات
يتيح لك PM2 بدء العمليات النشطة وسرد أسمائها وإيقافها يدويًا.
يمكنك سرد خوادم PM2 قيد التشغيل:
pm2 list
يمكنك إيقاف خادم واحد:
pm2 stop app.js
pm2 stop 0
pm2 stop allيمكنك حذف إعدادات خادم محفوظة:
pm2 delete app
pm2 delete 0
pm2 delete allتمامًا كما هو الحال مع Nodemon، يمكنك إعادة تحميل الخادم عند حدوث تغييرات:
pm2 start app.js --watch التعافي الذاتي
بدلًا من تشغيل تطبيق Node.js عبر node app.js، استخدم pm2 start app.js. عند تشغيل التطبيق بهذه الطريقة، سيتعافى PM2 تلقائيًا من الأعطال. فهو يعيد تشغيل الخادم تلقائيًا في حال فشله.
التوسع وموازنة الحمل
بشكل افتراضي، حتى لو كنت تشغّل التطبيق على معالج متعدد النواة، فإن Node.js يشغّل التطبيق على نواة معالج واحدة فقط. إذا كان لديك حركة مرورية عالية، تذهب جميع الطلبات إلى نسخة المعالج الواحدة بينما تبقى بقية الأنوية بلا عمل.
الفكرة وراء موازنة الحمل هي توزيع الحركة المرورية عبر عدة أنوية:
- pm2 start app.js -i 2
- pm2 start app.js -i 4
- pm2 start app.js -i 8
- pm2 start app.js -i max
يستخدم Node.js نمطًا محددًا لموازنة الحمل، حيث تذهب جميع الطلبات إلى نواة واحدة، وإذا أصبحت مشغولة، تُوزَّع الطلبات على الأنوية الأخرى. والنتيجة تطبيق قادر على التعامل مع حركة مرورية كبيرة.
المراقبة والتسجيل
تشغيل pm2 monit app.js يتيح لك مراقبة إحصاءات تطبيقك، بما في ذلك استخدام المعالج والذاكرة، وعرض السجلات في الوقت الفعلي.
بالإضافة إلى ذلك، يمكنك عرض السجلات لكل عملية أو تطبيق:
- pm2 logs processname
- pm2 logs app-name
تطبيق PM2 الرئيسي
يتيح لك PM2 مراقبة المقاييس على موقعه الرسمي.
ابدأ بتسجيل التطبيق باستخدام دليل PM2 الرسمي. بمجرد ربطه بموقع PM2 Keymetrics الرسمي، ينبغي أن تظهر لك مقاييس تطبيقك.
كلمة أخيرة
PM2 مدير عمليات قوي يساعدك على تنسيق تطبيقاتك باستخدام عدد قليل من الأوامر بينما تركّز أنت على بناء المنتج.