سیاست 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>

این عنصر دارای ویژگی های زیر است که در همه سیاست ها مشترک است:

صفت پیش فرض ضروری؟ شرح
name N/A ضروری

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

continueOnError نادرست اختیاری برای بازگرداندن خطا در صورت شکست خط مشی، روی "false" تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است. روی "true" تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.
enabled درست است، واقعی اختیاری برای اجرای این خط‌مشی روی «درست» تنظیم کنید. برای «خاموش کردن» خط مشی، روی «نادرست» تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.
async نادرست منسوخ این ویژگی منسوخ شده است.

نمونه ها

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

برای اطلاعات بیشتر، مرجع متغیرهای جریان را ببینید.

مرجع خطا

این بخش کدهای خطا و پیام‌های خطایی را که برگردانده می‌شوند و متغیرهای خطا را که توسط Edge تنظیم می‌شوند، هنگامی که این خط‌مشی خطا را راه‌اندازی می‌کند، توضیح می‌دهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.

خطاهای زمان اجرا

این خطاها ممکن است هنگام اجرای سیاست رخ دهند.

کد خطا وضعیت HTTP علت رفع کنید
policies.ratelimit.FailedToResolveSpikeArrestRate 500 این خطا در صورتی رخ می دهد که ارجاع به متغیر حاوی تنظیم نرخ در عنصر <Rate> به مقداری در خط مشی Spike Arrest قابل حل نباشد. این عنصر اجباری است و برای تعیین نرخ توقف سنبله به صورت int pm یا int ps استفاده می شود.
policies.ratelimit.InvalidMessageWeight 500 این خطا در صورتی رخ می دهد که مقدار تعیین شده برای عنصر <MessageWeight> از طریق متغیر جریان نامعتبر باشد (یک مقدار غیر صحیح).
policies.ratelimit.SpikeArrestViolation 429

از حد مجاز فراتر رفت.

خطاهای استقرار

این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.

نام خطا علت رفع کنید
InvalidAllowedRate اگر نرخ توقف اسپک مشخص شده در عنصر <Rate> سیاست دستگیری Spike یک عدد صحیح نباشد یا اگر نرخ پسوند ps یا pm نداشته باشد، در آن صورت استقرار پراکسی API با شکست مواجه می‌شود.

متغیرهای خطا

این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.

متغیرها کجا مثال
fault.name=" fault_name " fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. 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 برای فراتر از حد نرخ تعیین شده توسط خط مشی 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 در دسترس هستند.

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