شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات

خط مشی Spike Arrest با عنصر <Rate>
در برابر افزایش ترافیک محافظت می کند. این عنصر تعداد درخواستهایی را که توسط یک پروکسی API پردازش میشوند و به یک باطن ارسال میشوند کاهش میدهد و در برابر تاخیرهای عملکرد و خرابی محافظت میکند.
عنصر <SpikeArrest>
خط مشی Spike Arrest را تعریف می کند.
مقدار پیش فرض | به برگه سیاست پیشفرض در زیر مراجعه کنید |
مورد نیاز؟ | اختیاری |
تایپ کنید | شیء پیچیده |
عنصر والد | n/a |
عناصر کودک | <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>
خط مشی پیش فرض
مثال زیر تنظیمات پیشفرض را هنگام اضافه کردن خط مشی Spike Arrest به جریان خود در Edge UI نشان میدهد:
<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. |
نمونه ها
مثالهای زیر برخی از روشهای استفاده از خطمشی Spike Arrest را نشان میدهند:
مثال 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
) را می پذیرد که وزن پیام را برای برنامه ها یا مشتریان خاص تنظیم می کند. این کنترل اضافی بر روی throttling برای موجودیت هایی که با عنصر <Identifier>
شناسایی می شوند فراهم می کند.
مثال 4
مثال زیر به Spike Arrest دستور می دهد تا به دنبال یک مقدار زمان اجرا از طریق درخواستی باشد که به عنوان متغیر جریان request.header.runtime_rate
ارسال می شود:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
مقدار متغیر جریان باید به صورت int pm
یا int ps
باشد.
برای امتحان این مثال، درخواستی مانند زیر را اجرا کنید:
curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'
مرجع عنصر کودک
این بخش عناصر فرزند <SpikeArrest>
را توصیف می کند.
<DisplayName>
علاوه بر ویژگی name
، برای برچسب گذاری خط مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و طبیعی تر، از آن استفاده کنید.
عنصر <DisplayName>
در همه خط مشی ها مشترک است.
مقدار پیش فرض | n/a |
مورد نیاز؟ | اختیاری. اگر <DisplayName> را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود |
تایپ کنید | رشته |
عنصر والد | < PolicyElement > |
عناصر کودک | هیچ کدام |
عنصر <DisplayName>
از نحو زیر استفاده می کند:
نحو
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
مثال
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
عنصر <DisplayName>
هیچ ویژگی یا عنصر فرزند ندارد.
<Identifier>
به شما امکان میدهد نحوه گروهبندی درخواستها را انتخاب کنید تا خطمشی Spike Arrest بر اساس مشتری اعمال شود. برای مثال، میتوانید درخواستها را بر اساس شناسه توسعهدهنده گروهبندی کنید، در این صورت درخواستهای هر توسعهدهنده بهحساب نرخ دستگیری Spike خودش حساب میشود و نه همه درخواستها به پروکسی.
در ارتباط با عنصر <MessageWeight>
برای کنترل دقیق تر بر کاهش درخواست استفاده کنید.
اگر عنصر <Identifier>
را خالی بگذارید، یک محدودیت نرخ برای همه درخواستهای آن پراکسی API اعمال میشود.
مقدار پیش فرض | n/a |
مورد نیاز؟ | اختیاری |
تایپ کنید | رشته |
عنصر والد | <SpikeArrest> |
عناصر کودک | هیچ کدام |
نحو
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
مثال 1
مثال زیر خط مشی Spike Arrest را برای هر شناسه توسعه دهنده اعمال می کند:
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
جدول زیر ویژگی های <Identifier>
را شرح می دهد:
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
ref | متغیری را که Spike Arrest درخواست های دریافتی را گروه بندی می کند، مشخص می کند. شما می توانید از هر متغیر جریانی برای نشان دادن یک کلاینت منحصر به فرد استفاده کنید، مانند متغیرهایی که با خط مشی VerifyAPIKey در دسترس هستند. همچنین می توانید متغیرهای سفارشی را با استفاده از خط مشی جاوا اسکریپت یا خط مشی AssignMessage تنظیم کنید. | n/a | مورد نیاز |
این عنصر همچنین در پست انجمن Apigee زیر مورد بحث قرار گرفته است: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html .
<MessageWeight>
وزن تعریف شده برای هر پیام را مشخص می کند. وزن پیام تأثیر یک درخواست واحد را در محاسبه نرخ دستگیری Spike تغییر میدهد. وزن پیام می تواند هر متغیر جریانی باشد، مانند هدر HTTP، پارامتر پرس و جو، پارامتر فرم یا محتوای متن پیام. همچنین می توانید از متغیرهای سفارشی با استفاده از خط مشی جاوا اسکریپت یا خط مشی AssignMessage استفاده کنید.
در ارتباط با <Identifier>
برای کاهش بیشتر درخواستهای مشتریان یا برنامههای خاص استفاده کنید.
به عنوان مثال، اگر Spike Arrest <Rate>
10pm
باشد، و یک برنامه درخواست هایی با وزن 2
ارسال می کند، در این صورت فقط پنج پیام در دقیقه از طرف مشتری مجاز است زیرا هر درخواست 2 به حساب می آید.
مقدار پیش فرض | n/a |
مورد نیاز؟ | اختیاری |
تایپ کنید | عدد صحیح |
عنصر والد | <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
در درخواست) را می پذیرد که وزن پیام را برای مشتریان خاص تنظیم می کند. این کنترل اضافی بر روی throttling برای موجودیت هایی که با عنصر <Identifier>
شناسایی می شوند فراهم می کند.
جدول زیر ویژگی های <MessageWeight>
را شرح می دهد:
صفت | توضیحات | حضور | پیش فرض |
---|---|---|---|
ref | متغیر جریانی را که حاوی وزن پیام برای مشتری خاص است، شناسایی می کند. این می تواند هر متغیر جریان باشد، مانند پارامتر پرس و جو HTTP، هدر، یا محتوای متن پیام. برای اطلاعات بیشتر، مرجع متغیرهای جریان را ببینید. همچنین می توانید متغیرهای سفارشی را با استفاده از خط مشی جاوا اسکریپت یا خط مشی AssignMessage تنظیم کنید. | مورد نیاز | N/A |
<Rate>
با تنظیم تعداد درخواستهای مجاز در هر دقیقه یا هر ثانیه، نرخی را مشخص میکند که در آن افزایش (یا انفجار) ترافیک محدود شود. همچنین میتوانید از این عنصر همراه با <Identifier>
و <MessageWeight>
استفاده کنید تا با پذیرش مقادیر از مشتری، ترافیک را در زمان اجرا کنترل کنید.
مقدار پیش فرض | n/a |
مورد نیاز؟ | مورد نیاز |
تایپ کنید | عدد صحیح |
عنصر والد | <SpikeArrest> |
عناصر کودک | هیچ کدام |
نحو
می توانید نرخ ها را به یکی از روش های زیر مشخص کنید:
- نرخ ثابتی که به عنوان بدنه عنصر
<Rate>
مشخص میکنید - یک مقدار متغیر که می تواند توسط مشتری ارسال شود. نام متغیر جریان را با استفاده از ویژگی
ref
شناسایی کنید
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Rate ref="flow_variable">rate[pm|ps]</Rate> </SpikeArrest>
مقادیر نرخ معتبر (به عنوان یک مقدار متغیر یا در بدنه عنصر تعریف شده است) باید با قالب زیر مطابقت داشته باشد:
-
int ps
(تعداد درخواست در ثانیه، هموارسازی شده به فواصل میلی ثانیه) -
int pm
(تعداد درخواست در دقیقه، هموارسازی شده به فواصل ثانیه)
مقدار 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. برای اطلاعات بیشتر، مرجع متغیرهای جریان را ببینید. همچنین می توانید از متغیرهای سفارشی با استفاده از خط مشی جاوا اسکریپت یا خط مشی AssignMessage استفاده کنید. اگر هم به عنوان مثال: <Rate ref="request.header.custom_rate">1pm</Rate> در این مثال، اگر کلاینت هدر «custom_rate» را ارسال نکند ، نرخ پروکسی API 1 درخواست در دقیقه برای همه مشتریان است. اگر مشتری یک هدر "custom_rate" را ارسال کند، آنگاه محدودیت نرخ به 10 درخواست در ثانیه برای همه مشتریان در پروکسی تبدیل می شود - تا زمانی که درخواستی بدون سرصفحه "custom_rate" ارسال شود. می توانید از اگر مقداری برای | اختیاری | n/a |
<UseEffectiveCount>
هنگام استفاده از گروههای مقیاسبندی خودکار، تعداد Spike Arrest شما را در بین پردازشگرهای پیام (MPs) توزیع میکند.
نحو
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
مثال 1
مثال زیر <UseEffectiveCount>
را روی true تنظیم می کند:
<SpikeArrest name='Spike-Arrest-1'> <Rate>40ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
عنصر <UseEffectiveCount>
اختیاری است. وقتی عنصر از خط مشی Spike Arrest حذف می شود، مقدار پیش فرض false
است.
مقدار پیش فرض | نادرست |
مورد نیاز؟ | اختیاری |
تایپ کنید | بولی |
عنصر والد | <SpikeArrest> |
عناصر کودک | هیچ کدام |
جدول زیر ویژگی های عنصر <UseEffectiveCount>
را شرح می دهد:
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
ref | متغیری را که حاوی مقدار <UseEffectiveCount> است را شناسایی می کند. این می تواند هر متغیر جریان باشد، مانند پارامتر پرس و جو HTTP، هدر، یا محتوای متن پیام. برای اطلاعات بیشتر، مرجع متغیرهای جریان را ببینید. همچنین می توانید متغیرهای سفارشی را با استفاده از خط مشی جاوا اسکریپت یا خط مشی AssignMessage تنظیم کنید. | n/a | اختیاری |
اثر <UseEffectiveCount>
به مقدار آن بستگی دارد:
-
true
: حد افزایش نرخ یک MP برابر<Rate>
تقسیم بر تعداد نمایندگان فعلی در همان pod است. حد مجموع مقدار<Rate>
است. وقتی MP به صورت پویا اضافه میشوند (یا حذف میشوند)، محدودیتهای نرخ افزایش فردی آنها افزایش (یا کاهش) مییابد، اما حد مجموع ثابت میماند. -
false
(اگر حذف شود این مقدار پیشفرض است): محدودیت نرخ افزایش هر MP به سادگی مقدار<Rate>
آن است. حد مجموع، مجموع نرخ تمام نمایندگان مجلس است. هنگامی که نمایندگان مجلس اضافه می شوند (یا حذف می شوند)، محدودیت های نرخ افزایش فردی آنها ثابت می ماند، اما حد کل افزایش (یا کاهش می یابد).
جدول زیر تأثیر <UseEffectiveCount>
را بر محدودیت نرخ مؤثر هر MP نشان می دهد:
مقدار <UseEffectiveCount> | ||||||
---|---|---|---|---|---|---|
false | false | false | true | true | true | |
# نماینده مجلس | 8 | 4 | 2 | 8 | 4 | 2 |
مقدار <Rate> | 10 | 10 | 10 | 40 | 40 | 40 |
نرخ موثر هر MP | 10 | 10 | 10 | 5 | 10 | 20 |
حد کل | 80 | 40 | 20 | 40* | 40* | 40* |
* مانند <Rate> . |
در این مثال، توجه داشته باشید که وقتی تعداد MP از 4 به 2 کاهش می یابد، و <UseEffectiveCount>
false
است، نرخ موثر هر MP ثابت می ماند (در 10). اما زمانی که <UseEffectiveCount>
true
باشد، نرخ موثر در هر MP از 10 به 20 می رود زمانی که تعداد MP از 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 برای فراتر از حد نرخ تعیین شده توسط خط مشی Quota یا Spike Arrest 429
است (درخواست های خیلی زیاد). برای تغییر کد وضعیت HTTP به 500
(خطای سرور داخلی)، ویژگی features.isHTTPStatusTooManyRequestEnabled
را با استفاده از به روز رسانی API خصوصیات سازمانی روی 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 در دسترس هستند.
موضوعات مرتبط
- خط مشی سهمیه : خط مشی سهمیه، برای محدود کردن ترافیک روی مشتریان فردی
- محدود کردن نرخ برای یک نمای کلی محدود کننده نرخ
- مقایسه سهمیه و سیاست های SpikeArrest
- نمونه های کاری از پروکسی های API