لا يتمنى أي إنسان عاقل أن يحل عليه إعصار مدمر ولكن على عكس الحياة الواقعية.. يتمنى أصحاب المواقع ألا تتوقف أعاصير الزوار في موقعهم.
ولكن هل موقعك مستعد لأداء واجب الضيافة لهذا الكم الهائل من الزوار؟
من الأمور المهمة التي ربما يتجاهلها أو يجهلها أغلب أصحاب المواقع هي درجة صمود الموقع لضغط الطلبات من الزوار… فكم من موقع يغمى عليه أمام هذا الكم الهائل من الزوار. وكم من موقع تم توقيفه من قبل الشركة المستضيفة بسبب الحمل الزائد على الجهاز المستضيف.
الأسباب متعددة فهي تشمل:- <LI _extended="true">طريقة تصميم وبرمجة الموقع. <LI _extended="true">مواصفات الجهاز المستضيف (كالذاكرة والسرعة). <LI _extended="true">إعدادات الخادم الشبكي.
- وخادم قاعدة البيانات.
سأتناول في هذه التدوينة إعدادات الخادم الشبكي(
أباتشي) لأنها الأساس لبقاء الموقع على قيد الحياة… يتبعها في تدوينات مستقبلية(بإذن الله) تحسين أداء قاعدة البيانات (
ماياسكيوال) وطرق تحسين أداء الموقع عن طريق أفكار وأساليب برمجية.
إن كان موقعك مستضافاً في خادم مشترك (أي أنك لا تملك الصلاحية لتعديل إعدادات الخادم عن طريق سطر الأوامر) فلن تفيدك هذه النصائح كثيراً.
عندما يتم زيارة موقعك
لفهم المسألة التي نود إيجاد حل لها يتعين فهم الخطوات التي يقوم بها الخادم الشبكي لتلبية طلب الزائر لعرض صفحة ما، وهي كالتالي:
1. يستلم الخادم الشبكي (أباتشي) الطلب من المتصفح.
2. يتم التعرف على نوع الملف المطلوب وتوجيهه للبرامج الملحقة لتنفيذه (مثلا يتم إرسال صفحات
بياتشبي لمترجم بياتشبي) أو يتم الإنتقال إلى الخطوة 5.
3. في حال صفحات بياتشبي يقوم مترجم بياتشبي بتنفيذ الأوامر البرمجية وما يشملها من استعلامات لقاعدة البيانات.
4. في حال الإتصال بقاعدة البيانات يتم انتظار النتيجة ثم يتم تكوين الصفحة وإرسالها للخادم الشبكي.
5. يقوم الخادم الشبكي بتسليم الصفحة للمتصفح ومن ثم يستقبل من المتصفح طلبات الملفات الأخرى كنصوص الجافاسكربت والسياساس والفلاش المرتبطة بالصفحة التي تم طلبها سابقاً.
الخطوة الثالثة والرابعة هي أكثر الخطوات تأثيراً على طاقة موقعك في خدمة أكثر من زائر في نفس اللحظة.
معلومة: الصفحات أو الملفات الجامدة تستغرق مابين 0.001 إلى 0.010 ثانية بينما الصفحات النشطة (صفحات بياتشبي) قد تستغرق من 0.03 ثانية إلى قيمة max_execution_time المعرفة في ملف إعدادات بياتشبي php.ini.
ملاحظة:
زمن إنتاج الصفحات سيقصر إن نقلت موقعك إلى مستضيف ذو معالج أحدث وأسرع.
كمثال فإن صفحات مدونتي تستغرق معدل 0.5 ثانية كي يتم إنتاجها وهذا يرجع للخطوتين 3 و 4 من الدورة المذكورة أعلاه.
لمعرفة الوقت الذي تستغرقه صفحة في موقعك بالتقريب، عليك بإضافة الأوامر التالية في بداية ونهاية صفحة بياتشبي
في بداية الملف
كود PHP:
<? $time = microtime(true); ?>
وفي نهاية الملف
كود PHP:
<? $time2 = microtime(true); $gentime = $time2 - $time; echo "$gentime"; ?>
حسناً لننتقل الآن لحبيبنا الخادم الشبكي (أباتشي) وكيف نضمن قدر الإمكان خدمة العدد الهائل من الزوار قدر الإمكان، ولهذا لا بد من معرفة بعض القيم في ملف إعدادات أباتشي التي سنحتاج تعديلها لتناسب الموقع والجهاز المستضيف للموقع.
يوجد ملف إعدادات أباتشي في أغلب الأحيان في المسار التالي
/etc/httpd/conf/httpd.conf
ولكن قبل كل شي، احفظ نسخة احتياطية من ملف إعدادات أباتشي عن طريق الأمر التالي:
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.backup
اكتب السطر التالي كي تستعرض ملف إعدادات أباتشي عند الجزئية التي تهمنا
vi +/MaxClients /etc/httpd/conf/httpd.conf
الأمر السابق يعطيك نتيجة شبيهة بهذه الصورة
الجزئية التي تهمنا هي
كود PHP:
<ifmodule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </ifmodule>
ملاحظة: هذه هي الإعدادات الافتراضية عند تنصيب خادم أباتشي الشبكي.
هذه الإعدادات بسيطة جداً
StartServers
عندما يبدأ أباتشي في العمل (سواء بعد تشغيل النظام أو عند إعادة تشغيل خادم أباتشي) يقوم تلقائيا بعمل 8 خوادم تابعة تظل في الاحتياط لحين استدعائها لتلبية الطلبات المتزايدة.
MinSpareServers
يقوم أباتشي بإنشاء 5 خوادم في الإنتظار كحد أدنى كي تلبي أي طلب جديد في حال انشغال الخوادم الأخرى بطلبات أخرى.
MaxSpareServers
الحد الأقصى للخوادم في الإنتظار. هذه القيمة تخبر أباتشي بأن يقتل الخوادم الغير مستخدمة الزائدة حتى يصبح لدينا 20 خادماً في الإنتظار كحد أقصى.
MaxClients
هو العدد الأقصى للخوادم التي سيتم إنشائها لخدمة الزوار مثال 256. وهي تعني أيضا أن خادم أباتشي الشبكي سيخدم 256 طلبية في نفس اللحظة.(هنا القشة التي قد تقصم ظهر البعير موقعك)
ServerLimit
هذه القيمة هي نفس قيمة MaxClients
MaxRequestsPerChild
حدد هنا عمر الخادم (عدد الطلبات التي سيلبيها في حياته) قبل أن يتم قتله. القيمة 4000 هي قيمة مناسبة.
انتبه … الإعدادات الإفتراضية سيئة جداً… لماذا؟
لأن حجم خادم أباتشي في الذاكرة هو 35 ميجا تقريباً، فلو افترضنا أن الخادم المستضيف يملك 1 جيجا من الذاكرة وتعرض لآلاف الطلبات في نفس اللحظة فهذا يعني أنه سيتم إنشاء 256 خادم أباتشي مساعد لتلبية الطلبات
معنى هذا أن الذاكرة المطلوبة هي:
35 ميجا * 256 = 8.9 جيجا
وبما أن الخادم المستضيف لموقعك لا يملك سوى 1 جيجا سيلجأ نظام التشغيل إلى نقل بعض العمليات الموجودة بالذاكرة إلى القرص الصلب ومن ثم يقوم بإرجاعها لتكمل عملها… لهذا سيصل نظام التشغيل إلى نقطة حرجة تؤدي في أغلب الأحيان إلى جمود النظام وتوقفه عن العمل وعدم تمكنه من تقديم أي خدمة.
الأسوأ من هذا هو أنك لن تتمكن من الاتصال بموقعك كي تعيد تشغيل النظام، حينها يجب عليك الإتصال بالشركة كي يعيدوا تشغيل النظام ليعمل من جديد.
بإمكانك إنقاذ موقعك من هذه الحالة بعد أن تتم إعادة التشغيل بنجاح عن طريق تغيير MaxClients إلى قيمة تناسب سعة الذاكرة لديك.
أنصحك أن تترك في الذاكرة 512 ميجا حرة لنظام التشغيل والبرامج الأخرى، وأن تسمح لخادم أباتشي الشبكي باستخدام المساحة المتبقية بأريحية.
مثال:
لو أنك تملك ذاكرة بسعة 1024 ميجا، فخصص 512 ميجا لأباتشي، وبالتالي سيمكنك هذا القرار من تحديد قيمة MaxClients بحسبة بسيطة فإن MaxClients تساوي
512 % 35 = 14
MaxClients = المساحة التي خصصتها لأباتشي % متوسط حجم عملية أباتشي في الذاكرة
الصورة التي بالأسفل هي إعدادات أباتشي التي استخدمها، وقد حددت قيمة MaxClients ب10 فقط لأنها تناسب مواصفات الجهاز المستضيف لموقعي.
و لاتنسى أن تعيد تشغيل خادم أباتشي الشبكي حتى يتم تطبيق الإعدادات الجديدة.
ربما يصبح الموقع بطيئاً عند تعرضه لعدد هائل من الزوار وسيكون طبيعياً أن يرى بعض الزوار هذه الصفحة

ولكن لاتقلق فسوف يرون الصفحة المطلوبة إن حاولوا مرة أخرى.
تحياتي للجميع