ما هو PHP-FPM وكيف يدير طلبات المواقع؟

الكاتب: تاريخ النشر

باختصار: PHP-FPM (FastCGI Process Manager) هو مدير للعمليات التي تنفّذ شيفرة PHP على الخادم. يعمل مع خادم الويب ويدير عمليات عاملة تستطيع معالجة الطلبات المتتابعة دون تشغيل المفسّر من جديد في كل مرة. يساعد على تشغيل المواقع بكفاءة، ومنها المواقع المبنية على WordPress، لكنه لا يضمن وحده تقليل وقت التحميل؛ فشيفرة التطبيق وقاعدة البيانات والموارد المتاحة تؤثر أيضًا في ذلك.

كيف يعالج PHP-FPM طلب الصفحة

عندما يفتح المستخدم صفحة تتطلب تنفيذ PHP، يصل الطلب أولًا إلى خادم الويب، مثل Nginx أو Apache. يحيل الخادم المهمة إلى PHP-FPM عبر FastCGI، وهو بروتوكول للتواصل بين خادم الويب والعملية التي تشغّل التطبيق. يخصّص PHP-FPM عملية عاملة لمعالجة الطلب، ثم تعود نتيجة تنفيذ الشيفرة إلى خادم الويب، ومنه إلى المتصفح.

العملية العاملة هي عملية PHP قيد التشغيل وجاهزة لتنفيذ برنامج نصي. بعد الانتهاء من معالجة الطلب، تبقى عادةً متاحة للطلب التالي بدلًا من التوقف فورًا. وبذلك لا يلزم تحمّل كلفة تشغيل مفسّر جديد في كل مرة، كما يحدث مع CGI التقليدي.

على سبيل المثال، قد يتطلب فتح صفحة فرعية ديناميكية في WordPress تشغيل PHP وقراءة بيانات من قاعدة البيانات وتوليد HTML. يتولى PHP-FPM تنفيذ الجزء المكتوب بلغة PHP، لا جميع مراحل إيصال الصفحة. أما ملفات CSS والصور والموارد الثابتة الأخرى، فيعالجها خادم الويب عادةً دون تدخله.

ما الفرق بين PHP-FPM وPHP وخادم الويب

PHP هي لغة وبيئة لتنفيذ الشيفرة، بينما يدير PHP-FPM عمليات هذه البيئة. وهو ليس لغة مستقلة، ولا نظامًا لإدارة المحتوى، ولا بديلًا عن Nginx أو Apache. تؤدي هذه العناصر وظائف مختلفة ويمكنها العمل معًا.

يحيل Nginx تنفيذ برامج PHP النصية إلى آلية خارجية، غالبًا ما تكون PHP-FPM. ويمكن أن يستخدم Apache أيضًا PHP-FPM، لكن توجد كذلك إعدادات تستخدم الوحدة mod_php لتنفيذ PHP داخل عمليات Apache. لذلك لا ينبغي افتراض أن جميع الخوادم التي تشغّل PHP تعمل بالطريقة نفسها.

ولا يحل PHP-FPM محل OPcache أيضًا. يخزّن OPcache شيفرة PHP المترجمة في الذاكرة، مما يقلل الحاجة إلى إعادة تحليل الملفات وترجمتها. يدير PHP-FPM العمليات، بينما يقلل OPcache بعض العمل الذي تنفّذه هذه العمليات؛ لذا يمكن أن يكمل أحدهما الآخر.

متى يفيد PHP-FPM، وما الذي لا يعالجه

يتيح PHP-FPM التحكم في عدد العمليات وتشغيلها وإعادة إنشائها. ويساعد ذلك على مواءمة تشغيل التطبيق مع موارد الخادم وعدد الطلبات المتزامنة. لكن تفعيله لا يعني بالضرورة تحقيق تحسّن ملحوظ في السرعة مقارنةً بكل طريقة أخرى مضبوطة جيدًا لتشغيل PHP.

إذا كان متجر ينتظر طويلًا بسبب استعلام بطيء إلى قاعدة البيانات، فلن يقلّل PHP-FPM وحده مدة تنفيذ ذلك الاستعلام. كذلك لن يزيل تأخّر API خارجي، ولا كلفة العمليات التي تنفّذها إضافة وتستهلك موارد كثيرة. بل قد تؤدي زيادة عدد العمليات إلى تفاقم الحمل على قاعدة البيانات أو استنفاد الذاكرة.

وللتخزين المؤقت للصفحات الكاملة أهمية أيضًا. إذا أمكن إرسال HTML جاهز دون تشغيل PHP، فلن يشغل هذا الطلب عملية من عمليات PHP-FPM. ويختلف الأمر عند معالجة سلة التسوق أو لوحة الإدارة أو صفحة مخصّصة للمستخدم، إذ قد يكون تنفيذ الشيفرة ضروريًا.

أهم إعدادات العمليات

يجمع PHP-FPM العمليات في مجموعات، تضم كل منها عمليات عاملة وتُضبط إعداداتها بصورة مستقلة. ويمكن أن تختلف حدود هذه المجموعات وأن تعمل بصلاحيات مستخدمين مختلفين في النظام، مما يسهّل الفصل بين التطبيقات. لكن تقسيم العمليات إلى مجموعات لا يوفّر وحده عزلًا أمنيًا كاملًا.

يحدّد الإعداد pm كيفية الإبقاء على العمليات قيد التشغيل:

يحدّد المعامل pm.max_children الحد الأقصى لعدد العمليات العاملة في المجموعة، وبالتالي عدد طلبات PHP التي تستطيع المجموعة تنفيذها في الوقت نفسه. عندما تكون جميع العمليات مشغولة، قد تنتظر الطلبات التالية في طابور. وقد يؤدي طول الانتظار أو الحمل الزائد إلى حدوث خطأ.

على سبيل المثال، عند ضبط الحد على 10 عمليات، لن تُنفّذ أحد عشر طلبًا متزامنًا يتطلب PHP كلها في الوقت نفسه. لكن هذا لا يعني أن الموقع محدود بـ10 مستخدمين؛ فالمستخدم لا يشغل عملية طوال مدة التصفح، بل أثناء معالجة طلب محدد فقط.

كيف تتحقق من الحاجة إلى تغيير الإعدادات

في الاستضافة المشتركة، يدير المزوّد عادةً إعدادات PHP-FPM. وقد تتيح لك لوحة التحكم اختيار إصدار PHP وضبط بعض الحدود فقط. تحقّق من توافر PHP-FPM ونطاق الإعدادات المتاحة وحدود الموارد بالرجوع إلى وثائق الاستضافة أو دعمها الفني.

على خادمك الخاص، ابدأ بالقياس لا بزيادة الحدود. تحقّق مما إذا كانت المجموعة تبلغ الحد pm.max_children، ومقدار الذاكرة الذي تستهلكه العمليات تحت الحمل، وما إذا كانت لدى المعالج وقاعدة البيانات قدرة متبقية لاستيعاب مزيد من العمل. ويمكن لسجل الطلبات البطيئة في PHP-FPM، بعد ضبطه على نحو مناسب، أن يساعد في تحديد الشيفرة التي يستغرق تنفيذها وقتًا طويلًا.

الخطوة العملية التالية: اختر عملية بطيئة واحدة، مثل فتح سلة التسوق، وحدّد ما إذا كان التأخير ناتجًا عن انتظار عملية عاملة متاحة أم عن تنفيذ التطبيق نفسه. وعلى أساس هذه النتيجة فقط، يتبيّن ما إذا كان الأنسب تعديل حدود PHP-FPM أو تحسين الشيفرة وقاعدة البيانات.

اقرأ أيضًا

تعرّف إلى BIND، برنامج خادم DNS مفتوح المصدر، وأدواره في خدمة النطاقات، ومتطلبات تأمينه، ومتى تختار تشغيله بنفسك أو خدمة مُدارة.
تعرّف إلى سجل REGON ورقم التعريف فيه في بولندا، والفرق بينه وبين NIP وKRS، وكيفية التحقق من بيانات المنشآت وحدود ما يثبته السجل.
تعرّف على أهم ترويسات الأمان ودورها في حماية الموقع، وكيفية فحصها وتطبيقها تدريجياً دون تعطيل النماذج والمدفوعات والوظائف الضرورية.