مفهوم التوافرية العالية High Availability و استخدام موازن الحمل Load Balancer

مع تزايد الطلب على البنى التحتية ذات الاداء العالي والموثوق والمصممة لتخديم انظمة حرجة , أصبح مفهوم قابلية التوسع والاتاحية (التوافرية ) العالية مصطلحين لايمكن تجاهلهما في أي بنية تحتية حديثة .
حيث يجب أن تكون البنى التحتية متكيفة مع التوسع (أي يمكن اضافة أي عدد من المخدمات دون التأثير على عمل الشبكة) , وايضا يجب ان تحقق مفهوم التوافرية والذي يعني أن المستخدم يجب أن يحصل دوما على الاستجابة وبسرعات عالية , أي يجب وضع استراتيجيات لمواجهة زيادة الحمل على المخدمات , معالجة نقاط الفشل المركزية وتخفيف انقطاع الخدمة Downtime  .
 

ماهي التوافرية العالية

بشكل عام التوافرية (الاتاحية) تعبر عن الزمن الذي تكون فيه الخدمة قيد العمل والوقت الذي يحتاجه المخدم ليجيب طلب المستخدم وكذلك الاتاحية العالية High Availability تعبر عن جودة أداء النظام خلال فترة معينة من الوقت .

كيف يتم قياس التوافرية

يعبرّ عن التوافرية عادة كنسبة تُمثّل الزمن الذي تكون خلاله خدمة أو نظام ما قيد التشغيل، فتعبّر النسبة 100% مثلًا عن نظام يعمل طوال الوقت دون توقّف أبدًا، بينما تشير النسبة 99% من الوفرة خلال عام واحد إلى أنّ النظام سيعمل طوال العام مع احتمالية انقطاع في الخدمة (إجمالًا) بنسبة 1% أي ما يماثل 3.65 يوم (3 يوم و15 ساعة و36 دقيقة).
يتم وضع هذه النسب بالاعتماد على عدة عوامل، بما في ذلك فترات الصيانة المجدّولة والطارئة، بالإضافة إلى الوقت اللازم لاستعادة النظام لوضعه الطبيعي في حال حدوث خطأ .
 

موازن الحمل

يعدّ توزيع الحِمل Load balancing مكوِّنا أساسيًّا في البنى التحتية عالية التوفر Highly-available، الاستخدام الرئيسي لموازن الحمل هو توزيع العبء على عدة مخدمات تشغل نفس الخدمة .

مبدأ عمل موازن الحمل

1- حالة العمل بدون موازن حمل
لنفترض السيناريو التالي , لدينا مخدم ويب ومخدم قواعد بيانات متصلين على شبكة الانترنت ويمكن للمستخدم الولوج الى المواقع والتطبيقات المرفوعة على مخدم الويب عن طريق الدومين الخاص بالمخدم , ولكن في حال تعطل أحد المخدمين ستتوقف الخدمة ولن يستطيع المستخدم الاستفادة منها.
تدعى هذه الحالة نقطة الفشل المركزية Single Point Of Failure SPF , حيث يعنى بها وجود مكون ضمن الشبكة تتعطل الشبكة بتعطله وفي السيناريو السابق نقطة الفشل المركزية هي مخدم الويب ومخدم قواعد البيانات .
2- بوجود موازن الحمل
يمكن حل المشكلة السابقة بزيادة عدد المخدمات التي تحمل نفس التطبيق وجعلها تعمل خلف موازن حمل والذي يقوم بتوزيع الطلبات الواردة الى احد هذه المخدمات وهذا يقدم تسامح اكبر بالخطأ , حيث أن موازن الحمل سيقوم بتوجيه الطلبات الى مخدم اخر فعال في حال تعطل أحد المخدمات الأخرى.
وأيضا يزيد موازن الحمل من الأداء حيث طلبات المستخدمين لا تخدم من قبل مخدم واحد فقط كما في الحالة السابقة.
 

ولكن ماذا لو تعطل موازن الحمل ؟
ايضا موازن الحمل في هذه الحالة يشكل نقطة فشل مركزية Single Point Of Failure أي أنه بتعطل موازن الحمل ستتعطل الخدمة ويصبح المستخدم غير قادر على الوصول الى التطبيقات الموجودة على المخدمات , يمكن حل هذه المشكلة بتكرار موازن الحمل كما يلي :

آلية اختيار المخدم

يختار موزّع الحمل الخادم الذي سيتولّى الإجابة على الطلب بناء على عاملَيْن: أولاً؛ يتأكّد موزّع الحمل من قدرة الخادم على الإجابة على الطلبات التي ترده، ثم يستخدم مجموعة من القواعد المضبوطة مسبقا لاختيار خادم من بين الخوادم القادرة على الإجابة على الطلب.
ويتبع ذلك لعاملين :
·      قدرة المخدم على استقبال الطلب .
·      خوارزمية موازنة الحمل المتبعة .
 

خوارزميات موازنة الحمل

تحدّد خوارزميّة خادما – من بين الخوادم الجاهزة للإجابة – لتوجيه الطلب إليه. تعدّ الخوارزميّات التالية من بين الخوارزميّات الأكثر استخداما في توزيع الحمل:
–      Round Robin  
يتم توزيع الطلبات بالتتالي على المخدمات , حيث أن موازن الحمل يكون لديه قائمة بالمخدمات الموجودة وعند كل طلب يقوم بتوجيه الطلب الى المخدمات بالترتيب بدءا من أول هذه القائمة الى اخرها ومن ثم توزيع الطلبات من جديد من بداية القائمة .

 
يوضح الشكل خوارزمية موازنة الحمل Round Robin  حيث ورد إلى موازن الحمل 4 أربع طلبات سيتم توزيعها بالترتيب بدءا من أول قائمة المخدمات المتاحة ,الطلب الأول إلى أول مخدم والطلب الثاني إلى ثاني مخدم وهكذا وعند نهاية القائمة يتم التخديم من البداية لذا تعتبر هذه الخوارزمية دائرية .
 
–       Least connections  
تعتمد هذه الخوارزمية على عدد الاتصالات النشطة في المخدم ,بحيث يتم توزيع الطلبات الى المخدم ذو الأقل عددا من الاتصالات النشطة حتى يتساوى مع ثاني اقل مخدم من حيث عدد الاتصالات النشطة.

يوضح الشكل السابق طريقة التخديم في خوارزمية Least connection حيث يبدأ التخديم من المخدم الذي يملك اقل عدد اتصالات نشطة ويستمر توجيه الطلبات إلى هذا المخدم حتى يصبح عدد الاتصالات التي يملكها مساويا لثاني أقل عدد اتصالات نشطة في القائمة الخاصة بموازن الحمل .
 
–      Source
يختار موازن الحمل عند استخدام هذه الخوارزميّة الخادم الذي سيجيب على الطلب بناءً على عنوان IP المصدَر، مثلا؛ عنوان IP الزائر. يعني استخدامُ هذه الخوارزميّة أن طلبات زائر معيَّن ستُوجَّه دوما إلى نفس الخادم.

مراحل تخديم الطلب

يمر تخديم الطلب حتى يصل إلى العميل بعدة مراحل :
1.   يطلب العميل خدمة معينة من أحد المخدمات باستخدام الثنائية Port + IP
2.   يستقبل موازن الحمل الطلب , ويغير عنوان IP للمصدر مع إبقاء رقم المنفذ دون تغيير .
3.   يقوم موازن الحمل بتوجيه الطلب إلى المخدم المطلوب اعتمادا على الخوارزمية وقائمة المخدمات المتاحة لديه .
4.   يستقبل المخدم الهدف الطلب , ويقوم برد الاستجابة المناسبة إلى موازن الحمل .
5.   يستقبل موازن الحمل الاستجابة المطلوبة ويقوم بتغيير IP المصدر (إلى عنوان العميل الذي طلب الخدمة ) .
6.   يستقبل العميل الاستجابة وكأنها واردة من المخدم المطلوب .
 

الشفافية في موازن الحمل

مما ذكرنا فيما سبق أن موازن الحمل يغير عنوان المصدر ومن ثم يعيده بعد وصول الاستجابة من المخدم فانه يحقق مبدأ الشفافية والذي ينص على عدم شعور المستخدم بما يحصل في البيئة وشعوره على أن النظام هو نظام واحد وأن الاستجابة واردة من مخدم واحد فقط دون الإدراك بأن الاستجابة ليست بالضرورة واردة من نفس المخدم في كل مرة , أو الأعطال التي تحصل في البنية التحتية .
لبرمجيات التي يمكن استخدامها لتحقيق التوافرية العالية :
يمكن تحقيق موازن الحمل عن طريق HAProxy High Availability Proxy  والذي يعد من الحلول الشائعة لتنفيذ موازنة الحمل , ويمكن تفادي نقطة الفشل المركزية في حالة موازن الحمل يمكن انشاء موازنات حمل مرتبطة مع بعضها باستخدام  Corosync و Pacemaker  ويتوفّران على خوادم Ubuntu  و CentOS
 

المصادر:
https://www.digitalocean.com/community/tutorials/what-is-high-availability