سیاست SpikeArrest

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

نماد Spike Arrest از رابط کاربری Edge

خط مشی 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 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.

نمونه ها

مثال‌های زیر برخی از روش‌های استفاده از خط‌مشی 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 استفاده کنید.

اگر هم ref و هم بدنه این عنصر را تعریف کنید، مقدار ref اعمال می شود و زمانی که متغیر جریان در درخواست تنظیم می شود اولویت دارد. (وقتی متغیر مشخص شده در ref در درخواست تنظیم نشده باشد، عکس آن صادق است.)

به عنوان مثال:

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

در این مثال، اگر کلاینت هدر «custom_rate» را ارسال نکند ، نرخ پروکسی API 1 درخواست در دقیقه برای همه مشتریان است. اگر مشتری یک هدر "custom_rate" را ارسال کند، آنگاه محدودیت نرخ به 10 درخواست در ثانیه برای همه مشتریان در پروکسی تبدیل می شود - تا زمانی که درخواستی بدون سرصفحه "custom_rate" ارسال شود.

می توانید از <Identifier> برای گروه بندی درخواست ها برای اعمال نرخ های سفارشی برای انواع مختلف مشتری استفاده کنید.

اگر مقداری برای ref مشخص کنید اما نرخ را در بدنه عنصر <Rate> تنظیم نکنید و کلاینت مقداری را ارسال نکند، سیاست Spike Arrest خطایی ایجاد می کند.

اختیاری 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.
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 برای فراتر از حد نرخ تعیین شده توسط خط مشی 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 در دسترس هستند.

موضوعات مرتبط