سياسة 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>

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails.
enabled true Optional Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

أمثلة

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

مثال 1

يوضح المثال التالي السعر على خمسة في الثانية:

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

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

مثال 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>

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value n/a
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

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

Example

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

The <DisplayName> element has no attributes or child elements.

<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 تحدد المتغير الذي يتم من خلاله تجميع الطلبات التي تأتي من خلال "إزالة القبضة للسباق". يمكنك استخدام أي متغير تدفق للإشارة إلى عميل فريد، مثل تلك المتوفرة مع سياسةVerifyAPIKey يمكنك أيضًا ضبط المتغيّرات المخصّصة باستخدام سياسة 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 مللي ثانية. (5/1000).

مثال 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> ولا يمرّر العميل قيمة، يتم عندها استخدام سياسة Pike Arrest إلى حدوث خطأ.

اختياري 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. عند حذف العنصر من سياسة Spike Arrest.

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

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

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

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

  • true: الحد الأقصى لمعدّل الارتفاع الذي يجب أن يجنيه مدير الحملة هو <Rate> مقسومًا على العدد الحالي لـ "MP" في المجموعة نفسها. الحد المجمّع هو القيمة من <Rate>. عند إضافة (أو إزالة) أعضاء الفريق ديناميكيًا)، يحدث الارتفاع الفردي. ستزيد حدود المعدّل (أو تنخفض)، لكن سيبقى الحدّ المجمّع كما هو.
  • 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.

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

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

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

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

مرجع الخطأ

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
policies.ratelimit.FailedToResolveSpikeArrestRate 500 This error occurs if the reference to the variable containing the rate setting within the <Rate> element cannot be resolved to a value within the Spike Arrest policy. This element is mandatory and used to specify the spike arrest rate in the form of intpm or intps.
policies.ratelimit.InvalidMessageWeight 500 This error occurs if the value specified for the <MessageWeight> element through a flow variable is invalid (a non-integer value).
policies.ratelimit.SpikeArrestViolation 429

The rate limit was exceeded.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidAllowedRate If the spike arrest rate specified in the <Rate> element of the Spike Arrest Policy is not an integer or if the rate does not have ps or pm as a suffix, then the deployment of the API proxy fails.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "SpikeArrestViolation"
ratelimit.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. ratelimit.SA-SpikeArrestPolicy.failed = true

Example error response

Shown below is an example error response:

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

Example fault rule

Shown below is an example fault rule to handle a SpikeArrestViolation fault:

<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). يمكنك الرجوع إلى مخططات السياسات المتوفرة على جيت هب.

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