شما در حال مشاهده اسناد 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>
این عنصر دارای ویژگی های زیر است که در همه سیاست ها مشترک است:
صفت | پیش فرض | ضروری؟ | شرح |
---|---|---|---|
name | N/A | ضروری | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر |
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 استفاده کنید. اگر هم به عنوان مثال: <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 ). |
برای اطلاعات بیشتر، مرجع متغیرهای جریان را ببینید.
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
کد خطا | وضعیت HTTP | علت | رفع کنید |
---|---|---|---|
policies.ratelimit.FailedToResolveSpikeArrestRate | 500 | این خطا در صورتی رخ می دهد که ارجاع به متغیر حاوی تنظیم نرخ در عنصر <Rate> به مقداری در خط مشی Spike Arrest قابل حل نباشد. این عنصر اجباری است و برای تعیین نرخ توقف سنبله به صورت int pm یا int ps استفاده می شود. | build |
policies.ratelimit.InvalidMessageWeight | 500 | این خطا در صورتی رخ می دهد که مقدار تعیین شده برای عنصر <MessageWeight> از طریق متغیر جریان نامعتبر باشد (یک مقدار غیر صحیح). | build |
policies.ratelimit.SpikeArrestViolation | 429 | از حد مجاز فراتر رفت. |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.
نام خطا | علت | رفع کنید |
---|---|---|
InvalidAllowedRate | اگر نرخ توقف اسپک مشخص شده در عنصر <Rate> سیاست دستگیری Spike یک عدد صحیح نباشد یا اگر نرخ پسوند ps یا pm نداشته باشد، در آن صورت استقرار پراکسی API با شکست مواجه میشود. | build |
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که یک خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
متغیرها | کجا | مثال |
---|---|---|
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 در دسترس هستند.
موضوعات مرتبط
- خط مشی سهمیه : خط مشی سهمیه، برای محدود کردن ترافیک روی مشتریان فردی
- محدود کردن نرخ برای یک نمای کلی محدود کننده نرخ
- مقایسه سهمیه و سیاست های SpikeArrest
- نمونه های کاری از پروکسی های API