المؤلف الأصلي: آدم تشارنوك
الرابط الأصلي: دليل Hitchhikers لموازنة الأحمال PHP
الترجمة:
كان Koda يعني تشغيل خادم ويب كبير عند تشغيل تطبيق ويب كبير. نظرًا لأن تطبيقك يجذب عددًا كبيرًا من المستخدمين، فسيتعين عليك إضافة المزيد من الذاكرة والمعالجات إلى الخادم الخاص بك.
اليوم، انتهى نموذج "الخادم الكبير"، وحل محله عدد كبير من الخوادم الصغيرة، باستخدام مجموعة متنوعة من تقنيات موازنة التحميل. يعد هذا أسلوبًا أكثر جدوى من شأنه أن يبقي تكاليف الأجهزة عند الحد الأدنى.
تنعكس ميزة "المزيد من الخوادم الصغيرة" مقارنة بنموذج "الخادم الكبير" السابق في جانبين:
إذا تعطل الخادم، سيتوقف نظام موازنة التحميل عن تقديم الطلبات إلى الخادم المعطل وبدلاً من ذلك يقوم بتوزيع الحمل على خوادم أخرى تعمل بشكل طبيعي . أرقى.
أصبح توسيع نطاق الخادم الخاص بك أسهل. كل ما عليك فعله هو إضافة خوادم جديدة إلى نظام موازنة التحميل. لا حاجة لمقاطعة طلبك.
لذلك، استفد من هذه الفرصة :). والمقايضة، بالطبع، هي أنها تتطلب المزيد من التعقيد في تطوير التطبيق الخاص بك. هذا ما ستغطيه هذه المقالة.
في هذه المرحلة ربما تقول لنفسك: "ولكن كيف أعرف أنني أستخدم موازنة التحميل؟" '. الإجابة الأكثر صدقًا، إذا كنت تطرح هذا السؤال، هي أنك على الأرجح لا تستخدم نظام موازنة التحميل ولا يحتاج نظامك إلى أخذه في الاعتبار. في معظم الحالات، عندما يكبر التطبيق بدرجة كافية، يجب اقتراح موازنة التحميل وإعدادها بشكل صريح. ومع ذلك، أرى أحيانًا شركات استضافة الويب تقوم بموازنة التحميل لتطبيقات العملاء، أو تقوم بذلك بنفسها كما هو موضح أدناه.
قبل المتابعة أدناه، أود أن أشير إلى أن هذه المقالة تصف بشكل أساسي موازنة التحميل في PHP. قد أكتب عن موازنة تحميل البيانات في المستقبل، ولكن في الوقت الحالي سيتعين عليك الانتظار.
لاحظ أنني أستمر في ذكر "تطبيقات الويب" بدلاً من مواقع الويب، وذلك لتمييز أن "تطبيقات الويب" هي مواقع معقدة غالبًا ما تتضمن برمجة وقواعد بيانات من جانب الخادم، بدلاً من مواقع الويب التي تعرض فقط محتوى ثابتًا بسيطًا.
1. ملفات PHP السؤال الأول هو، إذا كان لديك عدد كبير من الخوادم الصغيرة، كيف يمكنك تحميل ملفات php الخاصة بك إلى جميع الخوادم؟ هناك الطريقة التالية للرجوع إليها:
رفع جميع الملفات إلى كل خادم على حدة. المشكلة في هذه الطريقة هي: تخيل أن لديك 20 خادمًا، فهذا سيؤدي بسهولة إلى حدوث أخطاء أثناء عملية التحميل، وسيكون وقت التحديث طويلاً جدًا. ومن الممكن أن يكون لديك إصدارات مختلفة من الملفات على خوادم مختلفة.
استخدم "rsync" (أو برنامج مشابه) حيث يمكن لمثل هذه الأداة مزامنة الملفات الموجودة على دليل محلي وأدلة على مضيفين بعيدين متعددين.
استخدم برنامج التحكم في الإصدار (مثل التخريب). فهو يتيح لي الحفاظ على الكود الخاص بي جيدًا، وعندما أنشر تطبيقي، يمكنني تشغيل أمر تحديث svn على كل خادم لمزامنته. يسهل هذا الأسلوب أيضًا تبديل الخوادم إلى إصدار سابق من التعليمات البرمجية.
استخدم خادم الملفات (قد تجد أن NFS رائع لهذا الغرض). في هذا الوقت، سوف تحتاج إلى إنفاق المزيد من المال لاستعادته.
تعتمد الطريقة التي تختارها على احتياجاتك والمهارات التي لديك. إذا كنت تستخدم نظامًا للتحكم في الإصدار، فقد ترغب في التخطيط لطريقة لتحديث التعليمات البرمجية على جميع الخوادم عن طريق تنفيذ أمر التحديث في نفس الوقت. ومع ذلك، إذا كنت تستخدم خادم ملفات، فسوف تحتاج إلى تنفيذ بعض آليات التعافي من الفشل لمنع فشل الطلب في حالة تعطل الخادم.
2. تحميل الملف عندما يكون هناك خادم واحد فقط، لا يمثل تحميل الملف مشكلة. ولكن عندما يكون لدينا خوادم متعددة، كيف يجب تخزين الملفات التي تم تحميلها؟ تشبه مشكلة تحميل الملفات مشكلة تخزين ملفات PHP عبر الخادم. فيما يلي العديد من الحلول الممكنة:
قم بتخزين الملف في قاعدة بيانات. تسمح معظم البيانات بتخزين البيانات الثنائية. عندما تطلب تنزيل ملف، يقوم الوصول إلى البيانات بإخراج البيانات الثنائية واسم الملف المقابل ونوعه إلى المستخدم. يجب أن تفكر في كيفية قيام قاعدة البيانات بتخزين ملفاتك قبل استخدام هذا الحل. المشكلة في هذا الأسلوب هي أنه إذا تعطل خادم قاعدة البيانات، فسيؤدي ذلك إلى عدم توفر الملفات.
قم بتخزين الملفات التي تم تحميلها على خادم الملفات، كما في المقدمة السابقة، تحتاج إلى تثبيت خادم ملفات لمشاركته بواسطة جميع خوادم الويب. قم بتحميل جميع الملفات التي تم تحميلها هنا، بعد التحميل، يمكن لجميع خوادم الويب استخدامه. ومع ذلك، إذا كان خادم الملفات معطلاً، فقد يحدث انقطاع في تنزيل ملف الصورة.
صمم آلية التحميل الخاصة بك لنقل الملفات إلى كل خادم. لا يحتوي هذا الأسلوب على عيوب خادم ملف واحد أو حل قاعدة بيانات، ولكنه سيزيد من تعقيد التعليمات البرمجية الخاصة بك. على سبيل المثال، إذا تعطل الخادم أثناء التحميل على خوادم متعددة، فماذا ستفعل؟
يعد استخدام قاعدة بيانات لتخزين الملفات التي تم تحميلها ولكن تصميم آلية التخزين المؤقت للملفات حلاً جيدًا. عندما يتلقى الخادم طلب تنزيل ملف، فإنه يتحقق أولاً مما إذا كان الملف موجودًا في نظام ذاكرة التخزين المؤقت، وإذا تم العثور عليه، فإنه يقوم بتنزيله من نظام ذاكرة التخزين المؤقت. وإلا، فإنه يقرأه من قاعدة البيانات ويخزنه مؤقتًا في نظام الملفات.
3. الجلسات
إذا كنت معتادًا على التعامل مع جلسة PHP، فمن المحتمل أن تعرف أنها تقوم افتراضيًا بتخزين بيانات الجلسة في ملفات مؤقتة على الخادم. علاوة على ذلك، هذا الملف موجود فقط على الخادم الذي طلبته فيه، ولكن قد تتم معالجة الطلبات اللاحقة بواسطة خادم آخر، مما سيؤدي إلى إنشاء جلسة جديدة على الخادم الآخر. يؤدي هذا إلى عدم التعرف على الجلسات بشكل متكرر، مثل مطالبة المستخدمين الذين قاموا بتسجيل الدخول دائمًا بتسجيل الدخول مرة أخرى.
الحل الذي أوصي به هو إما إعادة إنشاء آلية معالجة الجلسة المضمنة في PHP لتخزين بيانات الجلسة في قاعدة البيانات، أو تنفيذ الآلية الخاصة بك لضمان إرسال طلب المستخدم إلى نفس الخادم.
4. التكوين
على الرغم من أن هذا الموضوع لا يتعلق تحديدًا بـ PHP، إلا أنني أشعر أنه من الضروري ذكره. عند تشغيل خوادم مجمعة، من الجيد أن يكون لديك طريقة للحفاظ على مزامنة ملفات التكوين بين الخوادم. إذا كانت ملفات التكوين غير متناسقة، فقد يؤدي ذلك إلى بعض السلوكيات المتقطعة الغريبة جدًا والتي قد يكون من الصعب استكشافها وإصلاحها.
أوصي بإدارتها بشكل فردي باستخدام نظام التحكم في الإصدار. بهذه الطريقة يمكنك تخزين ملفات تكوين php مختلفة لعمليات تثبيت المشاريع المختلفة، وكذلك الحفاظ على مزامنة جميع ملفات تكوين الخادم.
5. التسجيل
كما هو الحال مع مشكلات التكوين، لا يرتبط التسجيل بـ PHP فقط. ولكن لا يزال من المهم جدًا الحفاظ على تشغيل الخادم الخاص بك بشكل سليم. بدون نظام تسجيل مناسب، كيف يمكنك معرفة ما إذا كان كود PHP الخاص بك يبدأ في إنشاء أخطاء (أنت دائمًا تقوم بإيقاف تشغيل إعداد Display_errors عندما يكون النظام نشطًا، أليس كذلك؟)
هناك عدة طرق يمكنك من خلالها تنفيذ التسجيل:
قم بتسجيل الدخول كل الخادم. هذه هي أسهل طريقة. كل جهاز يسجل ملف واحد فقط الميزة هي أنها بسيطة وقد تتطلب القليل جدًا من التكوين. ومع ذلك، مع زيادة عدد الخوادم، تصبح مراقبة ملفات السجل على كل خادم صعبة للغاية.
تسجيل الدخول إلى مشاركة لا يزال هذا الأسلوب يحتوي على ملفات السجل على كل خادم، ولكن يتم تخزينها على خادم ملفات مركزي عبر آلية المشاركة، مما يجعل مراقبة السجلات أسهل. المشكلة في هذا الحل هي أنه في حالة عدم توفر خادم الملفات، فإن مشكلة كتابة السجل البسيطة ستؤدي في النهاية إلى تعطل التطبيق بأكمله.
تسجيل الدخول إلى خادم تسجيل يمكنك استخدام برنامج تسجيل مثل سجل النظام لكتابة كافة السجلات إلى خادم مركزي. على الرغم من أن هذه الطريقة تتطلب المزيد من التكوين، إلا أنها توفر أيضًا الحل الأكثر قوة.
وأضاف phpv: هناك نقطة أخرى مهمة وهي إدارة قاعدة البيانات، والتي قد تتضمن الكثير من المحتوى، لذلك لم يكتبها المؤلف.