سياسة SpikeArrest

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

رمز نقطة الارتفاع المفاجئ من واجهة مستخدم Edge

توفر سياسة "منع الارتفاع" الحماية ضد الزيادات المفاجئة في عدد الزيارات باستخدام العنصر <Rate>. يحدّ هذا العنصر من عدد الطلبات التي يعالجها الخادم الوكيل لواجهة برمجة التطبيقات ويرسلها إلى خلفية معيّنة، ما يحمي من حالات التأخُّر في الأداء وفترة التوقف عن العمل.

عنصر <SpikeArrest>

تحدّد هذه السياسة سياسة "منع الارتفاع في الإنذار".

القيمة التلقائية اطّلِع على علامة التبويب السياسة التلقائية أدناه.
هل هو مطلوب؟ اختياري
النوع عنصر معقد
العنصر الرئيسي timing fixed in amara
العناصر الفرعية <Identifier>
<MessageWeight>
<Rate> (سمة مطلوبة)
<UseEffectiveCount>

البنية

يستخدم العنصر <SpikeArrest> الصيغة التالية:

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <DisplayName>display_name</DisplayName>
  <Properties/>
  <Identifier ref="flow_variable"/>
  <MessageWeight ref="flow_variable"/>
  <Rate ref="flow_variable">rate[pm|ps]</Rate>
  <UseEffectiveCount>[false|true]</UseEffectiveCount>
</SpikeArrest>

السياسة التلقائية

يعرض المثال التالي الإعدادات التلقائية عند إضافة سياسة "منع الارتفاع" إلى التدفق في واجهة مستخدم Edge:

<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-1">
  <DisplayName>Spike Arrest-1</DisplayName>
  <Properties/>
  <Identifier ref="request.header.some-header-name"/>
  <MessageWeight ref="request.header.weight"/>
  <Rate>30ps</Rate>
  <UseEffectiveCount>true</UseEffectiveCount>
</SpikeArrest>

يتضمن هذا العنصر السمات التالية الشائعة لجميع السياسات:

السمة تلقائي مطلوب الوصف
name لا ينطبق مطلوب

الاسم الداخلي للسياسة. يمكن أن تحتوي قيمة السمة name على أحرف وأرقام ومسافات وواصلات وشرطات سفلية ونقاط. ويجب ألا تتجاوز هذه القيمة 255 حرفًا.

اختياريًا، يمكنك استخدام العنصر <DisplayName> لتصنيف السياسة في محرّر الخادم الوكيل لواجهة مستخدم الإدارة باستخدام اسم بلغة مختلفة.

continueOnError false إجراء اختياري يمكنك ضبطها على "خطأ" لعرض رسالة خطأ عند تعذّر تنفيذ إحدى السياسات. ويُعدّ هذا سلوكًا متوقعًا في معظم السياسات. يمكنك ضبط القيمة على "صحيح" للاستمرار في تنفيذ العملية حتى بعد تعذُّر تنفيذ سياسة.
enabled صحيح إجراء اختياري اضبط القيمة على "true" لفرض السياسة. اضبط هذه القيمة على "false" على "إيقاف" السياسة. لن يتم فرض السياسة حتى إذا ظلت مرتبطة بتدفق.
async   false منهي العمل به تم إيقاف هذه السمة نهائيًا.

أمثلة

توضّح الأمثلة التالية بعض الطرق التي يمكنك من خلالها استخدام سياسة إيقاف الإنذار بسبب الارتفاع الكبير:

مثال 1

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

<SpikeArrest name="Spike-Arrest-1">
  <Rate>5ps</Rate>
</SpikeArrest>

تعمل السياسة على خفض معدّل الزحف إلى طلب واحد مسموح به كل 200 مللي ثانية (1000/5).

مثال 2

يحدّد المثال التالي المعدّل على 12 في الدقيقة:

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
</SpikeArrest>

تعمل هذه السياسة في المثال على تسهيل المعدّل إلى طلب واحد مسموح به كل خمس ثوانٍ (60/12).

مثال 3

في المثال التالي، يتم حصر عدد الطلبات على 12 في الدقيقة (يُسمح بطلب واحد كل خمس ثوانٍ، أو 60/12):

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
  <Identifier ref="client_id" />
  <MessageWeight ref="request.header.weight" />
</SpikeArrest>

علاوة على ذلك، يقبل العنصر <MessageWeight> القيمة المخصّصة (العنوان weight) التي تضبط حجم الرسائل مع تطبيقات أو برامج معيّنة. توفّر هذه الطريقة تحكّمًا إضافيًا في التقييد للكيانات التي يتم تحديدها باستخدام العنصر <Identifier>.

مثال 4

يطلب المثال التالي من Spike Arrest البحث عن قيمة وقت تشغيل تمّ ضبطها من خلال الطلب الذي يتم تمريره كمتغيّر مسار request.header.runtime_rate:

<SpikeArrest name="Spike-Arrest-1">
  <Rate ref="request.header.runtime_rate" />
</SpikeArrest>

يجب أن تكون قيمة متغير التدفق على شكل intpm أو intps.

لتجربة هذا المثال، يمكنك تنفيذ طلب كما يلي:

curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'

مرجع عنصر ثانوي

يصف هذا القسم العناصر الفرعية لـ <SpikeArrest>.

<DisplayName>

يمكنك استخدامها بالإضافة إلى السمة name لتصنيف السياسة في محرِّر الخادم الوكيل لواجهة المستخدم الخاصة بالإدارة، وذلك باستخدام اسم مختلف يبدو طبيعيًا.

العنصر <DisplayName> شائع لجميع السياسات.

القيمة التلقائية timing fixed in amara
هل هي مطلوبة؟ اختياريّ. إذا حذفت <DisplayName>، سيتم استخدام قيمة السمة name للسياسة.
النوع سلسلة
العنصر الرئيسي <PolicyElement>
العناصر الثانوية لا ينطبق

يستخدم العنصر <DisplayName> البنية التالية:

البنية

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

مثال

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

لا يتضمّن العنصر <DisplayName> أيّ سمات أو عناصر فرعية.

<Identifier>

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

استخدِم هذه السمة مع العنصر <MessageWeight> لمزيد من الدقة في التحكّم في تقييد الطلبات.

في حال ترك العنصر <Identifier> فارغًا، سيتم فرض حد سعر واحد لجميع الطلبات الواردة إلى الخادم الوكيل لواجهة برمجة التطبيقات هذا.

القيمة التلقائية timing fixed in amara
هل هو مطلوب؟ اختياري
النوع سلسلة
العنصر الرئيسي <SpikeArrest>
العناصر الفرعية لا ينطبق

البنية

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Identifier ref="flow_variable"/>
</SpikeArrest>
        

مثال 1

ينطبق المثال التالي على سياسة "إيقاف عدد النقرات المفاجئة" لكل رقم تعريف مطوِّر:

<SpikeArrest name="Spike-Arrest-1">
  <Identifier ref="developer.id"/>
  <Rate>42pm</Rate/>
</SpikeArrest>

ويوضّح الجدول التالي سمات <Identifier>:

السمة الوصف تلقائي التواجد في المنزل
ref تحدد المتغير الذي تستخدمه أداة Spike Arrest في تجميع الطلبات الواردة. يمكنك استخدام أي متغيّر للتدفق للإشارة إلى برنامج فريد، مثل البرامج المتوفّرة في سياسة التحقّق APIKey. يمكنك أيضًا ضبط المتغيّرات المخصّصة باستخدام سياسة JavaScript أو سياسةAssignMessage. timing fixed in amara مطلوبة

تتم مناقشة هذا العنصر أيضًا في مشاركة منتدى Apigee التالية: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.

<MessageWeight>

تُستخدَم لتحديد قيمة الترجيح المحددة لكل رسالة. ويعدِّل حجم الرسالة تأثير طلب واحد في حساب معدّل إيقاف رسائل الارتفاع. ويمكن أن يكون حجم الرسالة أي متغيّر للتدفق، مثل عنوان HTTP أو مَعلمة طلب البحث أو مَعلمة النموذج أو محتوى نص الرسالة. يمكنك أيضًا استخدام المتغيّرات المخصّصة باستخدام سياسة JavaScript أو سياسةAssignMessage.

يُستخدم هذا الإعداد مع <Identifier> للتحكّم بشكل أكبر في إمكانية معالجة الطلبات الواردة من برامج أو تطبيقات محدّدة.

على سبيل المثال، إذا كانت قيمة الحد الأقصى لإيقاف رصد الارتفاع <Rate> هي 10pm، وأرسل أحد التطبيقات طلبات بقيمة 2، سيتم السماح من هذا العميل بخمس رسائل فقط في الدقيقة لأنّ كل طلب يتم احتسابه كرسالتَين.

القيمة التلقائية timing fixed in amara
هل هو مطلوب؟ اختياري
النوع عدد صحيح
العنصر الرئيسي <SpikeArrest>
العناصر الفرعية لا ينطبق

البنية

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <MessageWeight ref="flow_variable"/>
</SpikeArrest>

مثال 1

في المثال التالي، يتم حصر عدد الطلبات على 12 في الدقيقة (يُسمح بطلب واحد كل خمس ثوانٍ، أو 60/12):

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
  <Identifier ref="client_id" />
  <MessageWeight ref="request.header.weight" />
</SpikeArrest>

في هذا المثال، تقبل السمة <MessageWeight> قيمة مخصّصة (عنوان weight في الطلب) تعمل على تعديل قِيم الرسائل لعملاء محدّدين. توفّر هذه الطريقة تحكّمًا إضافيًا في التقييد للكيانات التي يتم تحديدها باستخدام العنصر <Identifier>.

ويوضّح الجدول التالي سمات <MessageWeight>:

السمة الوصف التواجد في المنزل تلقائي
ref تحدد متغيّر التدفق الذي يحتوي على وزن الرسالة للعميل المحدّد. ويمكن أن يكون ذلك أي متغيّر للتدفق، مثل مَعلمة طلب بحث HTTP أو العنوان أو محتوى نص الرسالة. لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيّرات التدفق. يمكنك أيضًا ضبط المتغيّرات المخصّصة باستخدام سياسة JavaScript أو سياسةAssignMessage. مطلوبة لا ينطبق

<Rate>

تحدّد هذه السمة المعدّل الذي يجب عنده الحدّ من حالات الزيادة في عدد الزيارات (أو الانفجارات) من خلال ضبط عدد الطلبات المسموح بها في الفواصل الزمنية لكل دقيقة أو في الثانية. يمكنك أيضًا استخدام هذا العنصر مع <Identifier> و<MessageWeight> لتقليل عدد الزيارات بسلاسة أثناء وقت التشغيل من خلال قبول قيم من العميل.

القيمة التلقائية timing fixed in amara
هل هو مطلوب؟ مطلوبة
النوع عدد صحيح
العنصر الرئيسي <SpikeArrest>
العناصر الفرعية لا ينطبق

البنية

يمكنك تحديد الأسعار بإحدى الطرق التالية:

  • معدّل ثابت تحدّده كنص أساسي للعنصر <Rate>
  • تمثّل هذه السمة قيمة متغيّر يمكن للعميل تمريرها، وعليك تحديد اسم متغيّر التدفق باستخدام السمة ref.
<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Rate ref="flow_variable">rate[pm|ps]</Rate>
</SpikeArrest>

يجب أن تتوافق قيم المعدّل الصالحة (إما محدّدة كقيمة متغيّر أو في نص العنصر) مع التنسيق التالي:

  • intps (عدد الطلبات في الثانية، تسويتها إلى فواصل من المللي ثانية)
  • intpm (عدد الطلبات في الدقيقة، منسَّق إلى فواصل من الثواني)

يجب أن تكون قيمة int عددًا صحيحًا موجبًا وليس صفرًا.

مثال 1

يحدّد المثال التالي المعدّل على خمسة طلبات في الثانية:

<SpikeArrest name="Spike-Arrest-1">
  <Rate>5ps</Rate>
</SpikeArrest>

تعمل السياسة على خفض معدّل الزحف إلى طلب واحد مسموح به كل 200 مللي ثانية (1000/5).

مثال 2

يحدّد المثال التالي المعدّل على 12 طلبًا في الدقيقة:

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
</SpikeArrest>

تعمل هذه السياسة في المثال على تسهيل المعدّل إلى طلب واحد مسموح به كل خمس ثوانٍ (60/12).

ويوضّح الجدول التالي سمات <Rate>:

السمة الوصف التواجد في المنزل تلقائي
ref تحدد متغيّر التدفق الذي يحدِّد المعدّل. ويمكن أن يكون ذلك أي متغيّر للتدفق، مثل مَعلمة طلب بحث HTTP أو العنوان أو محتوى نص الرسالة، أو قيمة مثل KVM. لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيّرات التدفق.

يمكنك أيضًا استخدام المتغيّرات المخصّصة باستخدام سياسة JavaScript أو سياسةAssignMessage.

في حال تحديد كل من ref ونص هذا العنصر، يتم تطبيق القيمة ref وتكون لها الأولوية عند ضبط متغيّر التدفق في الطلب. (العكس صحيح إذا لم يتم ضبط المتغيّر المحدّد في ref في الطلب).

مثال:

<Rate ref="request.header.custom_rate">1pm</Rate>

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

يمكنك استخدام <Identifier> لتجميع الطلبات من أجل فرض أسعار مخصّصة لنوع مختلف من العملاء.

إذا حدّدت قيمة للحقل ref ولكن لم تضبط المعدّل في نص العنصر <Rate> ولم يمرّر العميل أي قيمة، ستعرض سياسة "منع الارتفاع" خطأ.

اختياري timing fixed in amara

<UseEffectiveCount>

يوزِّع عدد مرات منع الارتفاع على معالِجات الرسائل (MPs) عند استخدام مجموعات تغيير الحجم التلقائي.

البنية

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <UseEffectiveCount>[false|true]</UseEffectiveCount>
</SpikeArrest>

مثال 1

يضبط المثال التالي <UseEffectiveCount> على "صحيح":

<SpikeArrest name='Spike-Arrest-1'>
  <Rate>40ps</Rate>
  <UseEffectiveCount>true</UseEffectiveCount>
</SpikeArrest>

العنصر <UseEffectiveCount> اختياري وتكون القيمة التلقائية هي false عندما يتم حذف العنصر من سياسة منع الارتفاع المفاجئ.

القيمة التلقائية خطأ
هل هو مطلوب؟ اختياري
النوع منطقي
العنصر الرئيسي <SpikeArrest>
العناصر الفرعية لا ينطبق

يوضّح الجدول التالي سمات العنصر <UseEffectiveCount>:

السمة الوصف تلقائي التواجد في المنزل
ref تحدّد المتغيّر الذي يحتوي على قيمة <UseEffectiveCount>. ويمكن أن يكون ذلك أي متغيّر للتدفق، مثل مَعلمة طلب بحث HTTP أو العنوان أو محتوى نص الرسالة. لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيّرات التدفق. يمكنك أيضًا ضبط المتغيّرات المخصّصة باستخدام سياسة JavaScript أو سياسةAssignMessage. timing fixed in amara اختياري

يعتمد تأثير <UseEffectiveCount> على قيمته:

  • true: الحدّ الأقصى لمعدّل الارتفاع في الدقيقة هو <Rate> مقسومًا على العدد الحالي لوحدات البكسل في المجموعة نفسها. والحد الأقصى المجمَّع هو قيمة <Rate>. عند إضافة (أو إزالة) وحدات MP بشكل ديناميكي، ستزيد (أو تقل) الحدود الفردية لمعدّل الارتفاع، إلا أنّ الحدّ الأقصى الإجمالي لن يتغيّر.
  • false (هذه هي القيمة التلقائية في حال حذفها): الحدّ الأقصى لمعدّل الارتفاع المُقدّر لكل ميغا بكسل هو قيمة <Rate>. والحد المجمّع هو مجموع أسعار جميع أعضاء البرلمان. عند إضافة (أو إزالة) أعضاء الفريق، ستظل حدود معدّل الارتفاع الفردي كما هي، ولكن سيزيد الحدّ المجمَّع (أو ينخفض).

يعرض الجدول التالي تأثير <UseEffectiveCount> على حد المعدّل الفعلي لكل ميغا بكسل:

قيمة <UseEffectiveCount>
false false false true true true
عدد أعضاء البرلمان 8 4 2 8 4 2
قيمة <Rate> 10 10 10 40 40 40
المعدّل الفعّال لكل ميغا بكسل 10 10 10 5 10 20
الحد المجمّع 80 40 20 40* 40* 40*
* مماثل لـ <Rate>.

في هذا المثال، لاحِظ أنّه عندما ينخفض عدد وحدات ميغابكسل من 4 إلى 2، و<UseEffectiveCount> بمعدّل false، يبقى المعدّل الفعلي لكل ميغا بكسل كما هو (عند 10). أما عندما تكون <UseEffectiveCount> ميغا بكسل true، يزيد المعدل الفعلي لكل ميغا بكسل من 10 إلى 20 عندما يقل عدد وحدات ميغا بكسل من 4 إلى 2.

متغيرات التدفق

عند تنفيذ سياسة منع الارتفاع، تتم تعبئة متغيّر التدفق التالي:

متغير النوع الإذن الوصف
ratelimit.policy_name.failed منطقي قراءة فقط يشير إلى ما إذا كانت السياسة قد تعذّر تنفيذها (true أو false).

لمزيد من المعلومات، يُرجى الاطّلاع على مرجع متغيّرات التدفق.

مرجع الخطأ

يصف هذا القسم رموز الأخطاء ورسائل الخطأ التي يتم عرضها ومتغيّرات الأخطاء التي تضبطها Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. هذه المعلومات مهمة لمعرفة ما إذا كنت تعمل على تطوير قواعد للأخطاء للتعامل معها. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات وأخطاء المعالجة.

أخطاء في وقت التشغيل

يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.

رمز الخطأ رموز حالة HTTP السبب إصلاح
policies.ratelimit.FailedToResolveSpikeArrestRate 500 يحدث هذا الخطأ إذا تعذّر تحويل المرجع إلى المتغيّر الذي يحتوي على إعداد المعدّل في العنصر <Rate> إلى قيمة ضمن سياسة "منع الارتفاع". هذا العنصر إلزامي ويتم استخدامه لتحديد معدّل إيقاف التشغيل المفاجئ، ويكون هذا على شكل intpm أو intps.
policies.ratelimit.InvalidMessageWeight 500 يحدث هذا الخطأ إذا كانت القيمة المحدّدة للعنصر <MessageWeight> من خلال متغيّر التدفق غير صالحة (قيمة لا تمثّل عددًا صحيحًا).
policies.ratelimit.SpikeArrestViolation 429

تم تجاوز الحد المسموح به لمعدل الزيارات.

أخطاء النشر

يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.

اسم الخطأ السبب إصلاح
InvalidAllowedRate إذا لم يكن معدّل الإيقاف المؤقّت والمحدد في العنصر <Rate> ضِمن "سياسة إيقاف الارتفاع المفاجئ" عددًا صحيحًا أو لم يكن المعدّل يحتوي على ps أو pm كلاحقة، سيتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.

متغيرات الخطأ

ويتم ضبط هذه المتغيرات عند حدوث خطأ في وقت التشغيل. لمزيد من المعلومات، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات.

المتغيرات المكان مثال
fault.name="fault_name" fault_name هو اسم الخطأ، كما هو موضّح في جدول أخطاء وقت التشغيل أعلاه. اسم الخطأ هو الجزء الأخير من رمز الخطأ. fault.name Matches "SpikeArrestViolation"
ratelimit.policy_name.failed policy_name هو اسم السياسة التي حدّدها المستخدم التي أدت إلى حدوث الخطأ. ratelimit.SA-SpikeArrestPolicy.failed = true

مثال على الردّ على الخطأ

في ما يلي مثال على استجابة الخطأ:

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.SpikeArrestViolation"
      },
      "faultstring":"Spike arrest violation. Allowed rate : 10ps"
   }
}

مثال لقاعدة خطأ

في ما يلي مثال على قاعدة خطأ للتعامل مع خطأ SpikeArrestViolation:

<FaultRules>
    <FaultRule name="Spike Arrest Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "SpikeArrestViolation") </Condition>
        </Step>
        <Condition>ratelimit.Spike-Arrest-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

إنّ رمز حالة HTTP الحالي لتجاوز حدّ السعر الذي تم ضبطه من خلال سياسة الحصة أو الحد الأقصى المسموح به هو 429 (عدد كبير جدًا من الطلبات). لتغيير رمز حالة HTTP إلى 500 (خطأ داخلي في الخادم)، اضبط السمة features.isHTTPStatusTooManyRequestEnabled على false باستخدام واجهة برمجة التطبيقات لتعديل خصائص المؤسسة.

مثال:

curl -u email:password -X POST -H "Content-type:application/xml" http://api.enterprise.apigee.com/v1/organizations/myorg -d \
"<Organization type="trial" name="MyOrganization">
    <Properties>
        <Property name="features.isHTTPStatusTooManyRequestEnabled">true</Property>
        . . .
    </Properties>
</Organization>"

المخططات

ويتم تحديد كل نوع من أنواع السياسات من خلال مخطّط XML (.xsd). وتتوفّر مخطّطات السياسات كمرجع على GitHub.

مواضيع ذات صلة