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>