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

توفّر سياسة "الحظر المرتفع" الحماية من الارتفاعات المفاجئة في حركة المرور باستخدام العنصر <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 Optionally, use the |
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. إذا حددت كلاً من على سبيل المثال: <Rate ref="request.header.custom_rate">1pm</Rate> في هذا المثال، إذا لم يجتاز العميل قيمة "custom_rate" العنوان، ثم لخادم وكيل واجهة برمجة التطبيقات هو طلب واحد في الدقيقة لجميع العملاء. إذا اجتاز العميل "custom_rate" فسيصبح حد المعدل 10 طلبات في الثانية لجميع العملاء في الخادم الوكيل — إلى أن يتم طلب الطلب بدون ضبط "custom_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
.
عند حذف العنصر من سياسة 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 . |
build |
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). |
build |
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. |
build |
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
). يمكنك الرجوع إلى مخططات السياسات
المتوفرة على جيت هب.
مواضيع ذات صلة
- سياسة الحصة: الحصة للحدّ من الزيارات إلى العملاء الفرديين
- تقييد المعدّل لتقييد المعدّل نظرة عامة
- المقارنة سياسات الحصص وSpikeArrest
- نماذج عاملة للخوادم الوكيلة لواجهة برمجة التطبيقات