30.04.2024 7 min read

شرح تنسيق العمليات في Node.js باستخدام PM2

بواسطة Mirza Leka

عزّز تطبيقات Node.js باستخدام إدارة العمليات في PM2، والتعافي الذاتي، والتوسع، والمراقبة، والتسجيل.

PM2 and Node.js orchestration

تعلّم كيفية التعامل مع أعطال الخادم والحركة المرورية العالية باستخدام 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
PM2 status

لاحظ أننا لا نحصل على السجل مطبوعًا كما يحدث عادة عند تشغيل node app.js. علاوة على ذلك، يُخرجنا PM2 من الحلقة طويلة الأمد. إذا انتقلت إلى localhost:3000، يمكنك التحقق من أن الخادم يعمل.

Hello world on port 3000

الخادم يعمل الآن في الخلفية.

إدارة العمليات

يتيح لك PM2 بدء العمليات النشطة وسرد أسمائها وإيقافها يدويًا.

يمكنك سرد خوادم PM2 قيد التشغيل:

pm2 list
PM2 status 2

يمكنك إيقاف خادم واحد:

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
PM2 cores illustration

يستخدم Node.js نمطًا محددًا لموازنة الحمل، حيث تذهب جميع الطلبات إلى نواة واحدة، وإذا أصبحت مشغولة، تُوزَّع الطلبات على الأنوية الأخرى. والنتيجة تطبيق قادر على التعامل مع حركة مرورية كبيرة.

المراقبة والتسجيل

تشغيل pm2 monit app.js يتيح لك مراقبة إحصاءات تطبيقك، بما في ذلك استخدام المعالج والذاكرة، وعرض السجلات في الوقت الفعلي.

PM2 monitor app

بالإضافة إلى ذلك، يمكنك عرض السجلات لكل عملية أو تطبيق:

  • pm2 logs processname
  • pm2 logs app-name

تطبيق PM2 الرئيسي

يتيح لك PM2 مراقبة المقاييس على موقعه الرسمي.

PM2 homepage

ابدأ بتسجيل التطبيق باستخدام دليل PM2 الرسمي. بمجرد ربطه بموقع PM2 Keymetrics الرسمي، ينبغي أن تظهر لك مقاييس تطبيقك.

PM2 metrics

كلمة أخيرة

PM2 مدير عمليات قوي يساعدك على تنسيق تطبيقاتك باستخدام عدد قليل من الأوامر بينما تركّز أنت على بناء المنتج.

قراءات إضافية عرض الكل
الخطوة التالية

طبّق هذه الأفكار على منتجك

يساعد استوديو فالنس الفرق ذات المخاطر العالية على تحويل الوضوح الهندسي إلى تسليم منتج معياري.