Antipattern: موازنة الحمل من خلال خادم مستهدف واحد تم ضبط قيمة MaxFailures على قيمة غير صفرية

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

تحدِّد إعدادات TargetEndpoint طريقة توصيل Apigee Edge بخدمة خلفية أو واجهة برمجة تطبيقات. إنه يرسل الطلبات ويتلقى الردود من/إلى خدمة الخلفية. قد تكون خدمة الخلفية هي خادم HTTP/HTTPS، أو NodeJS، أو هدف مستضاف.

يمكن استدعاء خدمة الخلفية في TargetEndpoint بإحدى الطرق التالية:

  • توجيه عنوان URL إلى خادم HTTP أو HTTPS
  • ScriptTarget لنص برمجي Node.js مستضاف على Edge
  • تم نشر hostTarget على NodeJS على البيئة المستهدفة المُستضافة.
  • إعداد TargetServer

وبالمثل، يمكن استخدام سياسة وسيلة شرح الخدمة لإجراء اتصال بأي خدمة خارجية من خلال تدفق الخادم الوكيل لواجهة برمجة التطبيقات. تتيح هذه السياسة تحديد عناوين URL المستهدفة لبروتوكول HTTP/HTTPS إما بشكل مباشر في السياسة نفسها أو باستخدام إعدادات TargetServer.

إعداد TargetServer

تعمل إعدادات TargetServer على فصل عناوين URL الملموسة لنقاط النهاية عن إعدادات TargetEndpoint أو في سياسات وسائل شرح الخدمة. تتم الإشارة إلى TargetServer بواسطة اسم بدلاً من عنوان URL في TargetEndpoint. ستحصل تهيئة TargetServer على اسم المضيف لخدمة الخلفية ورقم المنفذ والتفاصيل الأخرى.

إليك نموذج إعداد TargetServer:

<TargetServer name="target1">
  <Host>www.mybackendservice.com</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer>

يتيح لك TargetServer الحصول على عمليات ضبط مختلفة لكل بيئة. يمكن ضبط سياسة وسائل شرح ميزة "هدف نقطة نهاية"/"خدمة" مع خادم واحد أو أكثر من خوادم "الأهداف" المسماة" باستخدام LoadBalancer. يعمل الدعم المُضمَّن لموازنة التحميل على تحسين مدى توفُّر واجهات برمجة التطبيقات وتجاوز الفشل بين مثيلات الخادم الخلفية التي تم إعدادها.

في ما يلي نموذج لإعدادات TargetEndpoint باستخدام TargetServers:

<TargetEndpoint name="default">
    <HTTPTargetConnection>>
      <LoadBalancer>
        <Server name="target1"/>
      <Server name="target2"/>
      </LoadBalancer>
    </HTTPTargetConnection>
</TargetEndpoint>

MaxFailures

تحدد الإعدادات MaxFailures الحد الأقصى لعدد حالات تعذُّر إرسال الطلبات إلى الخادم الهدف، والتي يتم بعدها وضع علامة على الخادم الهدف تشير إلى أنّه معطل وإزالته من التناوب لجميع الطلبات اللاحقة.

مثال على عملية ضبط باستخدام السمة MaxFailures:

<TargetEndpoint name="default">
    <HTTPTargetConnection>
      <LoadBalancer>
        <Server name="target1"/>
       <Server name="target2"/>
       <MaxFailures>5</MaxFailures>
      </LoadBalancer>
    </HTTPTargetConnection>
</TargetEndpoint>

في المثال المذكور أعلاه، إذا تعذّر تنفيذ خمسة طلبات متتالية لـ "target1"، ستتم إزالة "target1" من التناوب وسيتم إرسال جميع الطلبات اللاحقة إلى الهدف 2 فقط.

مضادة للأنماط

لا يُنصح بإعداد TargetServer واحد في إعدادات LoadBalancer لسياسة TargetEndpoint أو سياسة وسيلة شرح الخدمة مع ضبط قيمة السمة MaxFailures على قيمة غير صفرية، لأنّ ذلك قد يؤدي إلى تأثيرات سلبية.

ضع في الاعتبار نموذج الإعدادات التالي الذي يحتوي على TargetServer واحد باسم "target1" مع ضبط MaxFailures على 5 (قيمة غير صفرية):

<TargetEndpoint name="default">
  <HTTPTargetConnection>
      <LoadBalancer>
        <Algorithm>RoundRobin</Algorithm>
        <Server name="target1" />
        <MaxFailures>5</MaxFailures>
      </LoadBalancer>
  </HTTPTargetConnection>

إذا فشلت الطلبات الموجَّهة إلى TargetServer "target1" خمس مرات (الرقم المحدّد في MaxFailures)، تتم إزالة TargetServer من عملية التناوب. بسبب عدم توفّر خوادم TargetServers أخرى يتعذّر الوصول إليها، سيتعذّر تنفيذ هذه الإعدادات على جميع الطلبات اللاحقة للخادم الوكيل لواجهة برمجة التطبيقات التي تتضمّن هذه الإعدادات، وسيظهر الخطأ 503 Service Unavailable.

حتى في حالة عودة TargetServer "target1" إلى حالتها الطبيعية وقدرته على إرسال ردود ناجحة، ستستمر الطلبات إلى الخادم الوكيل لواجهة برمجة التطبيقات في عرض أخطاء 503. وذلك لأن شبكة Edge لا تعيد ميزة TargetServer بالدوران تلقائيًا حتى بعد تشغيل الهدف مرة أخرى. لمعالجة هذه المشكلة، يجب إعادة نشر الخادم الوكيل لواجهة برمجة التطبيقات لكي تتمكّن Edge من إعادة TargetServer إلى عملية التناوب.

إذا تم استخدام التهيئة نفسها في سياسة وسيلة شرح الخدمة، فستحصل طلبات واجهة برمجة التطبيقات على الخطأ 500 بعد أن تفشل الطلبات إلى TargetServer "target1" 5 مرات.

التأثير

عند استخدام خادم TargetServer واحد في عملية ضبط LoadBalancer لسياسة TargetEndpoint أو سياسة وسيلة شرح الخدمة مع ضبط القيمة MaxFailures على قيمة غير صفرية:

  • تتعذّر معالجة طلبات واجهة برمجة التطبيقات بسبب ظهور أخطاء 503/500 بشكل مستمر (بعد تعذُّر إرسال الطلبات لعدد مرات MaxFailures)، وذلك إلى أن تتم إعادة نشر الخادم الوكيل لواجهة برمجة التطبيقات.
  • انقطاع الخدمة لمدة أطول لأنّه معقد ويمكن أن يستغرق وقتًا أطول لتشخيص سبب هذه المشكلة (بدون معرفة مسبقة بهذا النمط المضاد).

أفضل الممارسات

  1. استخدام أكثر من خادم TargetServer واحد في إعدادات LoadBalancer لضمان توفُّر أكثر.
  2. يجب دائمًا تحديد أداة مراقبة الصحة عند ضبط MaxFailures على قيمة غير صفرية. ستتم إزالة الخادم الهدف من التناوب عندما يصل عدد حالات تعذُّر المعالجة إلى الرقم المحدَّد في MaxFailures. يضمن توفُّر HealthMonitor إعادة تفعيل خادم TargetServer مرة أخرى حالما يصبح الخادم الهدف متاحًا مرة أخرى، ما يعني أنه لا حاجة إلى إعادة نشر الخادم الوكيل.

    لضمان إجراء التحقّق من الصحة على رقم المنفذ نفسه الذي يستخدمه Edge للاتصال بالخوادم الهدف، تنصح Apigee بحذف العنصر الفرعي <Port> ضمن <TCPMonitor> ما لم يكن مختلفًا عن منفذ TargetServer. يكون <Port> هو نفسه منفذ TargetServer تلقائيًا.

    نموذج ضبط باستخدام HealthMonitor:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <LoadBalancer>
          <Algorithm>RoundRobin</Algorithm>
          <Server name="target1" />
          <Server name="target2" />
          <MaxFailures>5</MaxFailures>
        </LoadBalancer>
        <Path>/test</Path>
        <HealthMonitor>
          <IsEnabled>true</IsEnabled>
          <IntervalInSec>5</IntervalInSec>
          <TCPMonitor>
            <ConnectTimeoutInSec>10</ConnectTimeoutInSec>
          </TCPMonitor>
        </HealthMonitor>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  3. في حال وجود بعض القيود، لا يمكن سوى عنصر TargetServer واحد، وفي حال عدم استخدام HealthMonitor، يجب عدم تحديد MaxFailures في إعدادات LoadBalancer.

    القيمة التلقائية لـ MaxFailures هي 0. وهذا يعني أنّ متصفّح Edge يحاول دائمًا الاتصال بالهدف لكل طلب ولا يزيل الخادم الهدف من عملية التناوب.

محتوى إضافي للقراءة