Antipattern: إعداد الحصة غير الموزَّعة

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

توفّر Apigee Edge إمكانية ضبط عدد الطلبات المسموح بها لخادم وكيل واجهة برمجة التطبيقات من أجل لفترة زمنية محدَّدة باستخدام سياسة الحصة.

نقوش

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

لنوضح هذا بمساعدة مثال. مراعاة سياسة الحصة التالية لواجهة برمجة التطبيقات الوكيل:

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

من المفترض أن تتيح الإعدادات أعلاه ما مجموعه 100 طلب في الساعة.

من الناحية العملية، ومع ذلك، عندما يتم استخدام معالِجات رسائل متعددة في ما يخص طلبات البيانات من واجهة برمجة التطبيقات، ما يلي:

في الرسم التوضيحي أعلاه:

  • تم ضبط سياسة الحصة للسماح بتلقّي 100 طلب في الساعة.
  • يتم عرض الطلبات إلى الخادم الوكيل لواجهة برمجة التطبيقات بواسطة اثنين من معالجي الرسائل.
  • يحتفظ كل معالج رسائل بمتغير عدد حصصه الخاص، quota_count_mp1 وquota_count_mp2، لتتبُّع عدد الطلبات التي تتم معالجتها.
  • وبالتالي، سيسمح كل معالج من تطبيقات معالجة الرسائل بإرسال 100 طلب بيانات من واجهة برمجة التطبيقات بشكلٍ منفصل. التأثير الصافي هو أنّه تمّت معالجة 200 طلب إجمالاً بدلاً من 100 طلب.

التأثير

يؤدي هذا الموقف إلى إلغاء الغرض من إعداد الحصة وقد يكون له تأثيرات ضارة على خوادم الخلفية التي توفر الطلبات.

يمكن لخوادم الخلفية إجراء ما يلي:

  • الشعور بالتوتر بسبب زيادة عدد الزيارات الواردة
  • التوقّف عن الاستجابة للطلبات الأحدث من واجهة برمجة التطبيقات التي تؤدي إلى ظهور أخطاء 503

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

ننصحك بضبط العنصر <Distributed> على true في سياسة الحصة على التأكد من استخدام عدّاد مشترك لتتبع طلبات واجهة برمجة التطبيقات عبر كل معالِجات معالجة الرسائل. يمكن ضبط العنصر <Distributed> كما هو موضّح في مقتطف الرمز أدناه:

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>