شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
چی
از خط مشی Quota برای پیکربندی تعداد پیام های درخواستی که یک پروکسی API در یک دوره زمانی مجاز می دهد، مانند دقیقه، ساعت، روز، هفته یا ماه استفاده کنید. میتوانید سهمیه را برای همه برنامههایی که به پراکسی API دسترسی دارند یکسان تنظیم کنید، یا میتوانید سهمیه را بر اساس:
- محصولی که حاوی پروکسی API است
- برنامه درخواست کننده API
- توسعه دهنده برنامه
- خیلی معیارهای دیگه
از Quota برای محافظت در برابر افزایش ترافیک کلی استفاده نکنید. برای آن، از خط مشی Spike Arrest استفاده کنید. به سیاست دستگیری Spike مراجعه کنید.
ویدیوها
این ویدیوها مدیریت سهمیه را با خط مشی سهمیه معرفی می کنند:
مقدمه (New Edge)
مقدمه (کلاسیک Edge)
سهمیه پویا
توزیع شده و همزمان
وزن پیام
تقویم
پنجره نورد
فلکسی
سهمیه مشروط
متغیرهای جریان
رسیدگی به خطا
نمونه ها
این نمونههای کد خطمشی نحوه شروع و پایان دورههای سهمیه را به شرح زیر نشان میدهند:
سهمیه پویا بیشتر
<Quota name="CheckQuota"> <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit> <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/> </Quota>
سهمیه های پویا به شما امکان می دهد یک خط مشی سهمیه را پیکربندی کنید که تنظیمات مختلف سهمیه را بر اساس اطلاعات ارسال شده به خط مشی سهمیه اعمال می کند. اصطلاح دیگری برای تنظیمات سهمیه در این زمینه "طرح خدمات" است. سهمیه پویا "طرح خدمات" برنامه ها را بررسی می کند و سپس آن تنظیمات را اعمال می کند.
نکته : اگر برای یک عنصر هم مقدار و هم مرجع تعیین کنید، ارجاع اولویت را دریافت می کند. اگر مرجع در زمان اجرا حل نشد، از مقدار استفاده می شود.
به عنوان مثال، هنگامی که یک محصول API ایجاد می کنید، می توانید به صورت اختیاری محدودیت سهمیه مجاز، واحد زمانی و بازه زمانی را تنظیم کنید. با این حال، تنظیم این مقادیر در محصول API استفاده از آنها را در یک پراکسی API اعمال نمی کند. همچنین باید یک خط مشی Quota به پراکسی API اضافه کنید که این مقادیر را می خواند. برای اطلاعات بیشتر به ایجاد محصولات API مراجعه کنید.
در مثال بالا، پروکسی API حاوی خطمشی Quota از یک خطمشی VerifyAPIKey به نام verify-api-key
برای تأیید اعتبار کلید API ارسال شده در یک درخواست استفاده میکند. سپس خط مشی Quota به متغیرهای جریان از خط مشی VerifyAPIKey دسترسی پیدا می کند تا مقادیر سهمیه تنظیم شده در محصول API را بخواند. برای اطلاعات بیشتر در مورد متغیرهای جریان VerifyAPIKey، به تأیید خط مشی کلید API مراجعه کنید.
گزینه دیگر این است که ویژگی های سفارشی را روی توسعه دهندگان یا برنامه ها تنظیم کنید و سپس آن مقادیر را در خط مشی Quota بخوانید. به عنوان مثال، شما می خواهید مقادیر مختلف سهمیه برای هر توسعه دهنده را تنظیم کنید. در این حالت، شما ویژگیهای سفارشی را بر روی توسعهدهنده تنظیم میکنید که شامل حد، واحد زمانی و فاصله است. سپس به این مقادیر در خط مشی Quota همانطور که در زیر نشان داده شده است ارجاع می دهید:
<Quota name="DeveloperQuota"> <Identifier ref="verifyapikey.verify-api-key.client_id"/> <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> </Quota>
این مثال همچنین از متغیرهای جریان VerifyAPIKey برای ارجاع به ویژگی های سفارشی تنظیم شده روی توسعه دهنده استفاده می کند.
برای تنظیم پارامترهای خط مشی Quota می توانید از هر متغیری استفاده کنید. این متغیرها میتوانند از زیر آمده باشند:
- متغیرهای جریان
- ویژگیهای محصول، برنامه یا برنامهنویس API
- نقشه ارزش کلیدی (KVM)
- هدر، پارامتر پرس و جو، پارامتر فرم و غیره
برای هر پراکسی API، میتوانید یک خطمشی سهمیه اضافه کنید که یا به همان متغیری که همه خطمشیهای دیگر سهمیه در همه پراکسیهای دیگر ارجاع میدهد، یا خطمشی Quota میتواند به متغیرهای منحصربهفرد برای آن خطمشی و پراکسی اشاره کند.
زمان شروع
<Quota name="QuotaPolicy" type="calendar"> <StartTime>2017-02-18 10:30:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
برای یک سهمیه با type
تنظیم شده به calendar
، باید یک مقدار <StartTime>
صریح تعریف کنید. مقدار زمان زمان GMT است، نه زمان محلی. اگر مقدار <StartTime>
را برای یک خط مشی از نوع calendar
ارائه نکنید، Edge خطا می دهد.
شمارشگر سهمیه برای هر برنامه بر اساس مقادیر <StartTime>
، <Interval>
و <TimeUnit>
به روز می شود. برای این مثال، شمارش سهمیه در ساعت 10:30 صبح به وقت گرینویچ در 18 فوریه 2017 آغاز میشود و هر 5 ساعت یکبار تجدید میشود. بنابراین، به روز رسانی بعدی در ساعت 3:30 بعد از ظهر به وقت گرینویچ در 18 فوریه 2017 است.
پیشخوان دسترسی
<Quota name="QuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
یک پراکسی API به متغیرهای جریان تنظیم شده توسط خط مشی Quota دسترسی دارد. میتوانید به این متغیرهای جریان در پراکسی API دسترسی داشته باشید تا پردازش مشروط را انجام دهید، خطمشی را با نزدیک شدن به محدودیت سهمیه نظارت کنید، شمارنده سهمیه فعلی را به یک برنامه برگردانید یا به دلایل دیگر.
از آنجایی که دسترسی به متغیرهای جریان برای خط مشی بر اساس ویژگی name
سیاست ها است، برای خط مشی بالا به نام QuotaPolicy
به متغیرهای جریان آن به شکل زیر دسترسی دارید:
-
ratelimit.QuotaPolicy.allowed.count
: تعداد مجاز. -
ratelimit.QuotaPolicy.used.count
: مقدار شمارنده فعلی. -
ratelimit.QuotaPolicy.expiry.time
: زمان UTC زمانی که شمارنده تنظیم مجدد می شود.
بسیاری از متغیرهای جریان دیگر وجود دارند که می توانید به آنها دسترسی داشته باشید، همانطور که در زیر توضیح داده شده است.
برای مثال، میتوانید از سیاست AssignMessage زیر برای برگرداندن مقادیر متغیرهای Quota flow به عنوان سرصفحههای پاسخ استفاده کنید:
<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars"> <AssignTo createNew="false" type="response"/> <Set> <Headers> <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header> <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header> <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
اولین درخواست
<Quota name="MyQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="10000"/> </Quota>
از این کد نمونه برای اجرای سهمیه 10000 تماس در هر ساعت استفاده کنید. این خطمشی شمارنده سهمیه را در بالای هر ساعت بازنشانی میکند. اگر پیشخوان قبل از پایان ساعت به سهمیه 10000 تماس برسد، تماس های بیش از 10000 رد می شود.
به عنوان مثال، اگر شمارنده در 2017-07-08 07:00:00
شروع شود، سپس در 2017-07-08 08:00:00
(1 ساعت از زمان شروع) به 0 بازنشانی می شود. اگر اولین پیام در 2017-07-08 07:35:28
دریافت شود و تعداد پیامها قبل از 2017-07-08 08:00:00
10,000 برسد، تماسهای فراتر از این تعداد رد میشوند تا زمانی که شمارش در بالای صفحه بازنشانی شود. ساعت
زمان تنظیم مجدد شمارنده بر اساس ترکیب <Interval>
و <TimeUnit>
است. برای مثال، اگر <Interval>
را برای <TimeUnit>
ساعت روی 12 تنظیم کنید، شمارنده هر دوازده ساعت یکبار بازنشانی میشود. می توانید <TimeUnit>
را روی دقیقه، ساعت، روز، هفته یا ماه تنظیم کنید.
میتوانید این خطمشی را در چندین مکان در پروکسی API خود ارجاع دهید. به عنوان مثال، می توانید آن را روی Proxy PreFlow قرار دهید تا در هر درخواستی اجرا شود. یا، میتوانید آن را روی چندین جریان در پروکسی API قرار دهید. اگر از این خطمشی در چندین مکان در پراکسی استفاده میکنید، یک شمارنده واحد دارد که توسط همه موارد خطمشی بهروزرسانی میشود.
از طرف دیگر، می توانید چندین خط مشی Quota را در پروکسی API خود تعریف کنید. هر خط مشی سهمیه شمارنده خود را بر اساس ویژگی name
خط مشی حفظ می کند.
تعیین شناسه
<Quota name="QuotaPolicy" type="calendar"> <Identifier ref="request.header.clientId"/> <StartTime>2017-02-18 10:00:00</StartTime> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
بهطور پیشفرض، یک خطمشی Quota یک شمارنده واحد را برای پراکسی API، بدون توجه به منشأ درخواست، تعریف میکند. همچنین، میتوانید از ویژگی <Identifier>
با خط مشی Quota برای نگهداری شمارندههای جداگانه بر اساس مقدار ویژگی <Identifier>
استفاده کنید.
به عنوان مثال، از تگ <Identifier>
برای تعریف شمارنده های جداگانه برای هر شناسه مشتری استفاده کنید. در یک درخواست از پروکسی شما، برنامه سرویس گیرنده یک سرصفحه حاوی clientID
را ارسال می کند، همانطور که در مثال بالا نشان داده شده است.
شما می توانید هر متغیر جریان را به ویژگی <Identifier>
مشخص کنید. به عنوان مثال، می توانید مشخص کنید که یک پارامتر پرس و جو به نام id
حاوی شناسه منحصر به فرد باشد:
<Identifier ref="request.queryparam.id"/>
اگر از خطمشی VerifyAPIKey برای اعتبارسنجی کلید API یا خطمشیهای OAuthV2 با نشانههای OAuth استفاده میکنید، میتوانید از اطلاعات موجود در کلید یا نشانه API برای تعریف شمارندههای فردی برای همان خطمشی سهمیه استفاده کنید. به عنوان مثال، تگ <Identifier>
زیر از متغیر جریان client_id
یک خط مشی VerifyAPIKey به نام verify-api-key
استفاده می کند:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
اکنون هر مقدار یکتا client_id
شمارنده خود را در خط مشی Quota تعریف می کند.
کلاس
<Quota name="QuotaPolicy"> <Interval>1</Interval> <TimeUnit>day</TimeUnit> <Allow> <Class ref="request.header.developer_segment"> <Allow class="platinum" count="10000"/> <Allow class="silver" count="1000" /> </Class> </Allow> </Quota>
می توانید با استفاده از تعداد سهمیه مبتنی بر کلاس، محدودیت های سهمیه را به صورت پویا تنظیم کنید. در این مثال، محدودیت سهمیه با مقدار هدر developer_segment
که با هر درخواست ارسال میشود، تعیین میشود. آن متغیر می تواند دارای مقدار platinum
یا silver
باشد. اگر هدر یک مقدار نامعتبر داشته باشد، خطمشی خطای نقض سهمیه را برمیگرداند.
درباره سیاست سهمیه بندی
Quota مجموعه ای از پیام های درخواستی است که یک پروکسی API می تواند در یک بازه زمانی مانند دقیقه، ساعت، روز، هفته یا ماه مدیریت کند. این خطمشی شمارندههایی دارد که تعداد درخواستهای دریافتشده توسط پراکسی API را محاسبه میکند. این قابلیت به ارائهدهندگان API امکان میدهد محدودیتهایی را بر تعداد تماسهای API برقرار شده توسط برنامهها در یک بازه زمانی اعمال کنند. برای مثال، با استفاده از خطمشیهای سهمیه، میتوانید برنامهها را به 1 درخواست در دقیقه یا به 10000 درخواست در ماه محدود کنید.
به عنوان مثال، اگر یک سهمیه به عنوان 10000 پیام در ماه تعریف شود، محدودیت نرخ پس از پیام 10000 شروع می شود. مهم نیست که 10000 پیام در روز اول آن دوره حساب شده باشد یا آخرین روز. تا زمانی که شمارشگر سهمیه به طور خودکار در پایان بازه زمانی مشخص شده بازنشانی شود، یا تا زمانی که سهمیه به صراحت با استفاده از سیاست بازنشانی سهمیه بازنشانی شود، هیچ منطقه درخواست اضافی مجاز نیست.
تغییری در Quota به نام SpikeArrest از افزایش ناگهانی ترافیک (یا انفجار) که می تواند ناشی از افزایش ناگهانی استفاده، کلاینت های باگ یا حملات مخرب باشد، جلوگیری می کند. برای اطلاعات بیشتر در مورد SpikeArrest، به سیاست Spike Arrest مراجعه کنید.
سهمیه ها برای پراکسی های API منفرد اعمال می شود و بین پراکسی های API توزیع نمی شود. به عنوان مثال، اگر سه پراکسی API در یک محصول API دارید، یک سهمیه واحد بین هر سه به اشتراک گذاشته نمیشود، حتی اگر هر سه از یک پیکربندی خط مشی سهمیه استفاده کنند.
انواع خط مشی سهمیه
خط مشی Quota از چندین نوع مختلف خط مشی پشتیبانی می کند: پیش فرض، calendar
، flexi
، و rollingwindow
. همانطور که در جدول زیر نشان داده شده است، هر نوع مشخص می کند که شمارنده سهمیه چه زمانی شروع می شود و چه زمانی بازنشانی می شود:
واحد زمان | تنظیم مجدد پیش فرض (یا تهی). | تنظیم مجدد تقویم | تنظیم مجدد فلکسی |
---|---|---|---|
دقیقه | شروع دقیقه بعد | یک دقیقه بعد از <StartTime> | یک دقیقه پس از اولین درخواست |
ساعت | بالای ساعت آینده | یک ساعت بعد از <StartTime> | یک ساعت پس از اولین درخواست |
روز | نیمه شب GMT روز جاری | 24 ساعت پس از <StartTime> | 24 ساعت پس از اولین درخواست |
هفته | نیمه شب GMT یکشنبه در پایان هفته | یک هفته بعد از <StartTime> | یک هفته پس از اولین درخواست |
ماه | نیمه شب GMT آخرین روز ماه | یک ماه (28 روز) پس از <StartTime> | یک ماه (28 روز) پس از اولین درخواست |
برای type="calendar"
، باید مقدار <StartTime>
را مشخص کنید.
جدول مقدار نوع rollingwindow
را فهرست نمی کند. سهمیه های پنجره نورد با تنظیم اندازه یک سهمیه "پنجره" مانند پنجره یک ساعته یا یک روزه کار می کنند. هنگامی که یک درخواست جدید وارد می شود، خط مشی تعیین می کند که آیا از سهمیه در "پنجره" زمانی گذشته فراتر رفته است یا خیر.
به عنوان مثال، شما یک پنجره دو ساعته تعریف می کنید که اجازه 1000 درخواست را می دهد. یک درخواست جدید در ساعت 4:45 بعد از ظهر وارد میشود. این خطمشی تعداد سهمیه را برای پنجره دو ساعت گذشته محاسبه میکند، یعنی تعداد درخواستها از ساعت 2:45 بعد از ظهر. اگر در آن پنجره دو ساعته از حد نصاب تجاوز نکرده باشد، درخواست مجاز است.
یک دقیقه بعد، در ساعت 4:46 بعد از ظهر، درخواست دیگری وارد میشود. اکنون این خطمشی تعداد سهمیه را از ساعت 2:46 بعد از ظهر محاسبه میکند تا تعیین کند که آیا از حد مجاز فراتر رفته است یا خیر.
برای نوع rollingwindow
، شمارنده هرگز بازنشانی نمیشود، اما در هر درخواست مجدداً محاسبه میشود.
درک سهمیه شمار
به طور پیشفرض، یک خطمشی Quota یک شمارنده واحد را حفظ میکند، صرف نظر از اینکه چند بار به آن در یک پراکسی API ارجاع میدهید. نام شمارنده سهمیه بر اساس ویژگی name
سیاست است.
به عنوان مثال، شما یک خط مشی Quota به نام MyQuotaPolicy
با محدودیت 5 درخواست ایجاد می کنید و آن را روی چندین جریان (جریان A، B و C) در پروکسی API قرار می دهید. حتی اگر در جریانهای متعدد استفاده میشود، یک شمارنده واحد را حفظ میکند که توسط همه موارد سیاست بهروزرسانی میشود:
- جریان A اجرا می شود -> MyQuotaPolicy اجرا می شود و شمارنده آن = 1
- جریان B اجرا می شود -> MyQuotaPolicy اجرا می شود و شمارنده آن = 2
- جریان A اجرا می شود -> MyQuotaPolicy اجرا می شود و شمارنده آن = 3
- جریان C اجرا می شود -> MyQuotaPolicy اجرا می شود و شمارنده آن = 4
- جریان A اجرا می شود -> MyQuotaPolicy اجرا می شود و شمارنده آن = 5
درخواست بعدی برای هر یک از سه جریان رد می شود زیرا شمارنده سهمیه به حد مجاز خود رسیده است.
استفاده از یک خط مشی Quota در بیش از یک مکان در یک جریان پراکسی API، که می تواند ناخواسته باعث شود تا Quota سریعتر از آنچه انتظار داشتید تمام شود، یک ضدالگو است که در The Book of Apigee Edge Antipatterns توضیح داده شده است.
از طرف دیگر، می توانید چندین خط مشی Quota را در پروکسی API خود تعریف کنید و از یک خط مشی متفاوت در هر جریان استفاده کنید. هر خط مشی سهمیه شمارنده خود را بر اساس ویژگی name
خط مشی حفظ می کند.
یا از عناصر <Class>
یا <Identifier>
در خط مشی Quota برای تعریف شمارنده های متعدد و منحصر به فرد در یک خط مشی واحد استفاده کنید. با استفاده از این عناصر، یک خطمشی واحد میتواند شمارندههای مختلفی را بر اساس برنامهای که درخواست میکند، توسعهدهنده برنامه درخواستکننده، شناسه مشتری یا شناسه مشتری دیگر و موارد دیگر را حفظ کند. برای اطلاعات بیشتر در مورد استفاده از عناصر <Class>
یا <Identifier>
به مثال های بالا مراجعه کنید.
نمادگذاری زمان
همه زمانهای سهمیه بر روی منطقه زمانی هماهنگ جهانی (UTC) تنظیم شدهاند.
نماد زمان سهمیه از نماد تاریخ استاندارد بین المللی تعریف شده در استاندارد بین المللی ISO 8601 پیروی می کند.
تاریخ ها به صورت سال، ماه و روز در قالب زیر تعریف می شوند: YYYY-MM-DD
. به عنوان مثال، 2015-02-04
نشان دهنده 4 فوریه 2015 است.
زمان روز به صورت ساعت، دقیقه و ثانیه در قالب زیر تعریف می شود: hours:minutes:seconds
. به عنوان مثال، 23:59:59
نشان دهنده زمان یک ثانیه قبل از نیمه شب است.
توجه داشته باشید که دو نماد 00:00:00
و 24:00:00
برای تشخیص دو نیمه شبی که می توانند با یک تاریخ مرتبط شوند در دسترس هستند. بنابراین 2015-02-04 24:00:00
همان تاریخ و ساعت 2015-02-05 00:00:00
است. دومی معمولاً نماد ترجیحی است.
دریافت تنظیمات سهمیه از پیکربندی محصول API
میتوانید محدودیتهای سهمیه را در تنظیمات محصول API تنظیم کنید. این محدودیت ها به طور خودکار سهمیه را اعمال نمی کنند. در عوض، میتوانید به تنظیمات سهمیه محصول در خطمشی سهمیه اشاره کنید. در اینجا برخی از مزایای تعیین سهمیه روی محصول برای مرجع سیاست های سهمیه آورده شده است:
- خطمشیهای سهمیه میتوانند از یک تنظیم یکسان در همه پراکسیهای API در محصول API استفاده کنند.
- میتوانید تغییرات زمان اجرا را در تنظیمات سهمیه در یک محصول API ایجاد کنید، و خطمشیهای سهمیهای که به طور خودکار به مقدار ارجاع میدهند دارای مقادیر سهمیه بهروز هستند.
برای اطلاعات بیشتر در مورد استفاده از تنظیمات سهمیه از یک محصول API، به مثال "سهمیه پویا" در بالا مراجعه کنید. .
برای اطلاعات در مورد پیکربندی محصولات API با محدودیت های سهمیه، به ایجاد محصولات API مراجعه کنید.
مرجع عنصر
در زیر عناصر و ویژگی هایی وجود دارد که می توانید در این خط مشی پیکربندی کنید. توجه داشته باشید که برخی از ترکیبات عناصر متقابلاً منحصر به فرد هستند یا مورد نیاز نیستند. برای استفاده خاص به نمونه ها مراجعه کنید. متغیرهای verifyapikey.VerifyAPIKey.apiproduct.*
زیر بهطور پیشفرض در دسترس هستند زمانی که از یک خطمشی Verify API Key به نام «VerifyAPIKey» برای بررسی کلید API برنامه در درخواست استفاده میشود. مقادیر متغیر از تنظیمات سهمیه روی محصول API می آیند که کلید با آن مرتبط است، همانطور که در دریافت تنظیمات سهمیه از پیکربندی محصول API توضیح داده شده است.
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar"> <DisplayName>Quota 3</DisplayName> <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> <Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow> <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit> <StartTime>2017-7-16 12:00:00</StartTime> <Distributed>false</Distributed> <Synchronous>false</ Synchronous> <AsynchronousConfiguration> <SyncIntervalInSeconds>20</ SyncIntervalInSeconds> <SyncMessageCount>5</ SyncMessageCount> </AsynchronousConfiguration> <Identifier/> <MessageWeight/> </Quota>
ویژگی های <Quota>
<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
ویژگی های زیر مختص این سیاست است.
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
نوع | برای تعیین زمان و چگونگی استفاده از سهمیهسنج از آن استفاده کنید. برای اطلاعات بیشتر به انواع خط مشی سهمیه مراجعه کنید. اگر یک مقدار مقادیر معتبر عبارتند از:
| تقویم | اختیاری |
جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
name | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name
برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
---|---|
حضور | اختیاری |
تایپ کنید | رشته |
عنصر <Allow>
محدودیت تعداد برای سهمیه را مشخص می کند. اگر شمارنده خطمشی به این مقدار حد برسد، تماسهای بعدی تا زمانی که شمارنده تنظیم مجدد نشود، رد میشود.
در زیر سه راه برای تنظیم عنصر <Allow>
نشان داده شده است:
<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
اگر هم count
و هم countRef
را مشخص کنید، countRef
اولویت را دریافت می کند. اگر countRef
در زمان اجرا حل نشود، از مقدار count
استفاده می شود.
پیش فرض: | N/A |
حضور: | اختیاری |
نوع: | عدد صحیح |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
شمارش | برای تعیین تعداد پیام برای سهمیه استفاده کنید. به عنوان مثال، مقدار مشخصه | 2000 | اختیاری |
countRef | برای تعیین یک متغیر جریان حاوی تعداد پیام برای یک سهمیه استفاده کنید. | هیچ کدام | اختیاری |
عنصر <Allow>/<Class>
عنصر <Class>
به شما امکان می دهد مقدار عنصر <Allow>
را بر اساس مقدار متغیر جریان شرطی کنید. برای هر تگ فرزند متفاوت <Allow>
<Class>
، این خط مشی یک شمارنده متفاوت دارد.
برای استفاده از عنصر <Class>
، یک متغیر جریان را با استفاده از ویژگی ref
به تگ <Class>
مشخص کنید. سپس Edge از مقدار متغیر جریان برای انتخاب یکی از تگهای فرزند <Allow>
برای تعیین تعداد مجاز خط مشی استفاده میکند. Edge مقدار متغیر جریان را با ویژگی class
تگ <Allow>
مطابقت می دهد، همانطور که در زیر نشان داده شده است:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
در این مثال، شمارنده سهمیه فعلی با مقدار پارامتر query time_variable
که با هر درخواست ارسال می شود، تعیین می شود. آن متغیر می تواند مقدار peak_time
یا off_peak_time
داشته باشد. اگر پارامتر پرس و جو حاوی یک مقدار نامعتبر باشد، خط مشی یک خطای نقض سهمیه را برمی گرداند.
پیش فرض: | N/A |
حضور: | اختیاری |
نوع: | N/A |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | برای تعیین یک متغیر جریان حاوی کلاس سهمیه برای یک سهمیه استفاده کنید. | هیچ کدام | مورد نیاز |
عنصر <Allow>/<Class>/<Allow>
عنصر <Allow>
حدی را برای یک شمارنده سهمیه تعریف شده توسط عنصر <Class>
مشخص می کند. برای هر تگ فرزند متفاوت <Allow>
<Class>
، این خط مشی یک شمارنده متفاوت دارد.
به عنوان مثال:
<Allow> <Class ref="request.queryparam.time_variable"> <Allow class="peak_time" count="5000"/> <Allow class="off_peak_time" count="1000"/> </Class> </Allow>
در این مثال، خط مشی Quota دو شمارنده سهمیه به نامهای peak_time
و off_peak_time
را حفظ میکند.
پیش فرض: | N/A |
حضور: | اختیاری |
نوع: | N/A |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
کلاس | نام شمارنده سهمیه را مشخص می کند. | هیچ کدام | مورد نیاز |
شمارش | حد سهمیه پیشخوان را مشخص می کند. | هیچ کدام | مورد نیاز |
عنصر <Interval>
برای تعیین یک عدد صحیح (مثلاً 1، 2، 5، 60 و غیره) استفاده کنید که با TimeUnit
که مشخص کرده اید (دقیقه، ساعت، روز، هفته یا ماه) جفت می شود تا دوره زمانی تعیین شود که Edge استفاده از سهمیه را محاسبه می کند.
به عنوان مثال، Interval
24
با TimeUnit
hour
به این معنی است که سهمیه در طول 24 ساعت محاسبه می شود.
<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
پیش فرض: | هیچ کدام |
حضور: | مورد نیاز |
نوع: | عدد صحیح |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | برای تعیین یک متغیر جریان حاوی بازه یک سهمیه استفاده کنید. | هیچ کدام | اختیاری |
عنصر <TimeUnit>
برای تعیین واحد زمان قابل اعمال برای سهمیه استفاده کنید.
به عنوان مثال، Interval
24
با TimeUnit
hour
به این معنی است که سهمیه در طول 24 ساعت محاسبه می شود.
<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
پیش فرض: | هیچ کدام |
حضور: | مورد نیاز |
نوع: | رشته از |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | برای تعیین یک متغیر جریان حاوی واحد زمان برای یک سهمیه استفاده کنید. ref بر یک مقدار فاصله صریح اولویت دارد. اگر ref در زمان اجرا حل نشد، از مقدار استفاده می شود. | هیچ کدام | اختیاری |
عنصر <StartTime>
وقتی type
روی calendar,
تاریخ و زمانی را مشخص می کند که شمارشگر سهمیه شروع به شمارش می کند، صرف نظر از اینکه درخواستی از هر برنامه ای دریافت شده باشد یا خیر.
هنگامی که type
به طور صریح روی calendar,
تنظیم شده است، باید یک StartTime
صریح ارائه دهید، نمی توانید از یک مرجع برای متغیر جریان استفاده کنید، اگر مقدار StartTime
را زمانی که مقدار type
تنظیم نشده است تعیین کنید، یک خطا دریافت می کنید.
به عنوان مثال:
<StartTime>2017-7-16 12:00:00</StartTime>
پیش فرض: | هیچ کدام |
حضور: | زمانی که type روی calendar تنظیم شده است، لازم است. |
نوع: | رشته در قالب تاریخ و زمان ISO 8601 . |
عنصر <Distributed>
نصب Edge می تواند از یک یا چند پردازشگر پیام برای پردازش درخواست ها استفاده کند. این عنصر را روی true
تنظیم کنید تا مشخص کنید که خط مشی باید یک شمارنده مرکزی داشته باشد و به طور مداوم آن را در همه پردازشگرهای پیام همگام سازی کند. پردازشگرهای پیام می توانند در مناطق و/یا مناطق در دسترس باشند.
اگر از مقدار پیشفرض false
استفاده میکنید، ممکن است از سهمیه خود فراتر بروید زیرا تعداد هر پردازشگر پیام به اشتراک گذاشته نمیشود:
<Distributed>true</Distributed>
برای تضمین همگام سازی شمارنده ها و به روز رسانی در هر درخواست، <Distributed>
و <Synchronous>
را روی true تنظیم کنید:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
پیش فرض: | نادرست |
حضور: | اختیاری |
نوع: | بولی |
عنصر <همگام>
برای به روز رسانی همزمان شمارنده سهمیه توزیع شده روی true
تنظیم کنید. این بدان معنی است که به روز رسانی پیشخوان همزمان با بررسی سهمیه در یک درخواست به API انجام می شود. اگر ضروری است اجازه ندهید هیچ تماس API بیش از حد مجاز نباشد، روی true
تنظیم کنید.
برای بهروزرسانی ناهمزمان شمارنده سهمیه، روی false
تنظیم کنید. این به این معنی است که بسته به زمانی که شمارنده سهمیه در مخزن مرکزی بهطور ناهمزمان بهروزرسانی میشود، ممکن است برخی از فراخوانهای API بیش از سهمیه انجام شوند. با این حال، با تأثیرات بالقوه عملکرد مرتبط با بهروزرسانیهای همزمان مواجه نخواهید شد.
فاصله به روز رسانی ناهمزمان پیش فرض 10 ثانیه است. از عنصر AsynchronousConfiguration
برای پیکربندی این رفتار ناهمزمان استفاده کنید.
<Synchronous>false</Synchronous>
پیش فرض: | نادرست |
حضور: | اختیاری |
نوع: | بولی |
عنصر <AsynchronousConfiguration>
زمانی که عنصر پیکربندی خط مشی <Synchronous>
موجود نباشد یا وجود داشته باشد و روی false
تنظیم شده باشد، فاصله همگامسازی را در میان شمارندههای سهمیه توزیع شده پیکربندی میکند.
میتوانید با استفاده از عناصر فرزند SyncIntervalInSeconds
یا SyncMessageCount
، پس از یک دوره زمانی یا تعداد پیامها همگامسازی کنید. آنها متقابلاً منحصر به فرد هستند. به عنوان مثال،
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
یا
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
پیش فرض: | SyncIntervalInSeconds = 10 ثانیه |
حضور: | اختیاری؛ وقتی <Synchronous> روی true تنظیم شود نادیده گرفته می شود. |
نوع: | مرکب |
عنصر <AsynchronousConfiguration>/<SyncIntervalInSeconds>
از این برای نادیده گرفتن رفتار پیشفرض که در آن بهروزرسانیهای ناهمزمان پس از یک فاصله زمانی 10 ثانیه انجام میشود، استفاده کنید.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
فاصله همگام سازی باید >= 10 ثانیه باشد که در مبحث Limits توضیح داده شده است.
پیش فرض: | 10 |
حضور: | اختیاری |
نوع: | عدد صحیح |
عنصر <AsynchronousConfiguration>/<SyncMessageCount>
تعداد درخواستها را در تمام پردازندههای پیام Apigee بین بهروزرسانیهای سهمیه مشخص میکند.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
این مثال مشخص می کند که تعداد سهمیه هر 5 درخواست در هر پردازشگر پیام Apigee Edge به روز می شود.
پیش فرض: | n/a |
حضور: | اختیاری |
نوع: | عدد صحیح |
عنصر <Identifier>
از عنصر <Identifier>
برای پیکربندی خط مشی برای ایجاد شمارنده های منحصر به فرد بر اساس یک متغیر جریان استفاده کنید.
اگر از این عنصر استفاده نمی کنید، این خط مشی از یک شمارنده واحد استفاده می کند که در برابر سهمیه اعمال می شود.
این عنصر همچنین در پست انجمن Apigee زیر مورد بحث قرار گرفته است: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html .
<Identifier ref="verifyapikey.verify-api-key.client_id"/>
پیش فرض: | N/A |
حضور: | اختیاری |
نوع: | رشته |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
رجوع کنید | یک متغیر جریان را مشخص می کند که شمارنده مورد استفاده برای درخواست را مشخص می کند. شناسه میتواند یک هدر HTTP، پارامتر پرس و جو، پارامتر فرم یا محتوای پیام باشد که برای هر برنامه، کاربر برنامه، توسعهدهنده برنامه، محصول API یا سایر مشخصهها منحصر به فرد است. در برخی شرایط، تنظیمات Quota باید در جایی که | N/A | اختیاری |
عنصر <MessageWeight>
برای تعیین وزن اختصاص داده شده به هر پیام استفاده کنید. از وزن پیام برای افزایش تأثیر پیام های درخواستی استفاده کنید که به عنوان مثال، منابع محاسباتی بیشتری را نسبت به سایرین مصرف می کنند.
برای مثال، میخواهید پیامهای POST را دو برابر «سنگین» یا گرانتر از پیامهای GET بشمارید. بنابراین، شما MessageWeight
را روی 2 برای POST و 1 برای GET قرار می دهید. حتی میتوانید MessageWeight
را روی 0 تنظیم کنید تا درخواست روی شمارنده تأثیری نداشته باشد. در این مثال، اگر سهمیه 10 پیام در دقیقه و MessageWeight
برای درخواستهای POST 2
باشد، سهمیه اجازه 5 درخواست POST را در هر فاصله 10 دقیقهای میدهد. هرگونه درخواست اضافی، POST یا GET، قبل از رد شدن مجدد شمارنده.
مقداری که MessageWeight
را نشان میدهد باید توسط یک متغیر جریان مشخص شود و میتواند از سرصفحههای HTTP، پارامترهای پرس و جو، بار درخواست XML یا JSON یا هر متغیر جریان دیگری استخراج شود. به عنوان مثال، شما آن را در یک هدر به نام weight
تنظیم می کنید:
<MessageWeight ref="message_weight"/>
پیش فرض: | N/A |
حضور: | اختیاری |
نوع: | عدد صحیح |
متغیرهای جریان
متغیرهای جریان از پیش تعریف شده زیر به طور خودکار در هنگام اجرای یک خط مشی Quota پر می شوند. برای اطلاعات بیشتر در مورد متغیرهای جریان، به مرجع متغیرها مراجعه کنید.
متغیرها | تایپ کنید | مجوزها | توضیحات |
---|---|---|---|
ratelimit.{policy_name}.allowed.count | طولانی | فقط خواندنی | تعداد سهمیه مجاز را برمی گرداند |
ratelimit.{policy_name}.used.count | طولانی | فقط خواندنی | سهمیه فعلی استفاده شده در یک بازه سهمیه را برمیگرداند |
ratelimit.{policy_name}.available.count | طولانی | فقط خواندنی | تعداد سهمیه موجود در بازه سهمیه را برمیگرداند |
ratelimit.{policy_name}.exceed.count | طولانی | فقط خواندنی | پس از فراتر رفتن از سهمیه، 1 را برمیگرداند. |
ratelimit.{policy_name}.total.exceed.count | طولانی | فقط خواندنی | پس از فراتر رفتن از سهمیه، 1 را برمیگرداند. |
ratelimit.{policy_name}.expiry.time | طولانی | فقط خواندنی | زمان UTC را بر حسب میلی ثانیه برمیگرداند که تعیین میکند چه زمانی سهمیه منقضی شود و بازه سهمیه جدید شروع شود. هنگامی که نوع خط مشی سهمیه |
ratelimit.{policy_name}.identifier | رشته | فقط خواندنی | مرجع شناسه (مشتری) پیوست شده به خط مشی را برمی گرداند |
ratelimit.{policy_name}.class | رشته | فقط خواندنی | کلاس مرتبط با شناسه کلاینت را برمی گرداند |
ratelimit.{policy_name}.class.allowed.count | طولانی | فقط خواندنی | تعداد سهمیه مجاز تعریف شده در کلاس را برمی گرداند |
ratelimit.{policy_name}.class.used.count | طولانی | فقط خواندنی | سهمیه استفاده شده در یک کلاس را برمی گرداند |
ratelimit.{policy_name}.class.available.count | طولانی | فقط خواندنی | تعداد سهمیه موجود در کلاس را برمیگرداند |
ratelimit.{policy_name}.class.exceed.count | طولانی | فقط خواندنی | تعداد درخواستهایی را که از حد مجاز کلاس در بازه سهمیه فعلی فراتر میرود، برمیگرداند |
ratelimit.{policy_name}.class.total.exceed.count | طولانی | فقط خواندنی | تعداد کل درخواستهایی را که از حد مجاز کلاس در تمام فواصل سهمیه فراتر میرود، برمیگرداند، بنابراین مجموع class.exceed.count برای تمام فواصل سهمیه است. |
ratelimit.{policy_name}.شکست خورد | بولی | فقط خواندنی | نشان می دهد که آیا خط مشی شکست خورده است (درست یا نادرست). |
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
کد خطا | وضعیت HTTP | علت | رفع کنید |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference | 500 | اگر عنصر <Interval> در خط مشی Quota تعریف نشده باشد رخ می دهد. این عنصر اجباری است و برای تعیین فاصله زمانی قابل اعمال برای سهمیه استفاده می شود. فاصله زمانی می تواند دقیقه، ساعت، روز، هفته یا ماه باشد که با عنصر <TimeUnit> تعریف شده است. | build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference | 500 | اگر عنصر <TimeUnit> در خط مشی Quota تعریف نشده باشد رخ می دهد. این عنصر اجباری است و برای تعیین واحد زمان قابل اعمال در سهمیه استفاده می شود. فاصله زمانی می تواند بر حسب دقیقه، ساعت، روز، هفته یا ماه باشد. | build |
policies.ratelimit.InvalidMessageWeight | 500 | اگر مقدار عنصر <MessageWeight> مشخص شده از طریق متغیر جریان نامعتبر باشد (مقدار غیر صحیح) رخ می دهد. | build |
policies.ratelimit.QuotaViolation | 500 | از حد مجاز فراتر رفت. | N/A |
خطاهای استقرار
نام خطا | علت | رفع کنید |
---|---|---|
InvalidQuotaInterval | اگر بازه سهمیه مشخص شده در عنصر <Interval> یک عدد صحیح نباشد، در آن صورت استقرار پراکسی API با شکست مواجه می شود. به عنوان مثال، اگر بازه سهمیه مشخص شده 0.1 در عنصر <Interval> باشد، در آن صورت استقرار پروکسی API با شکست مواجه می شود. | build |
InvalidQuotaTimeUnit | اگر واحد زمانی مشخص شده در عنصر <TimeUnit> پشتیبانی نشود، استقرار پروکسی API با شکست مواجه می شود. واحدهای زمانی پشتیبانی شده عبارتند از minute ، hour ، day ، week و month . | build |
InvalidQuotaType | اگر نوع سهمیه مشخص شده توسط ویژگی type در عنصر <Quota> نامعتبر باشد، در این صورت استقرار پراکسی API ناموفق است. انواع سهمیه پشتیبانی شده default , calendar , flexi و rollingwindow هستند . | build |
InvalidStartTime | اگر قالب زمان مشخص شده در عنصر <StartTime> نامعتبر باشد، استقرار پروکسی API با شکست مواجه می شود. قالب معتبر yyyy-MM-dd HH:mm:ss است که فرمت تاریخ و زمان ISO 8601 است. به عنوان مثال، اگر زمان مشخص شده در عنصر <StartTime> 7-16-2017 12:00:00 باشد، استقرار پراکسی API با شکست مواجه می شود. | build |
StartTimeNotSupported | اگر عنصر <StartTime> مشخص شده باشد که نوع سهمیه آن از نوع calendar نیست، در این صورت استقرار پراکسی API با شکست مواجه می شود. عنصر <StartTime> فقط برای نوع سهمیه calendar پشتیبانی می شود. به عنوان مثال، اگر ویژگی type در عنصر <Quota> روی پنجره flexi یا rolling window تنظیم شده باشد، استقرار پراکسی API با شکست مواجه میشود. | build |
InvalidTimeUnitForDistributedQuota | اگر عنصر <Distributed> روی true و عنصر <TimeUnit> روی second تنظیم شود، استقرار پراکسی API با شکست مواجه می شود. واحد زمانی second برای سهمیه توزیع شده نامعتبر است. | build |
InvalidSynchronizeIntervalForAsyncConfiguration | اگر مقدار تعیینشده برای عنصر <SyncIntervalInSeconds> در عنصر <AsynchronousConfiguration> در یک خطمشی Quota کمتر از صفر باشد، در آن صورت استقرار پراکسی API با شکست مواجه میشود. | build |
InvalidAsynchronizeConfigurationForSynchronousQuota | اگر مقدار عنصر <AsynchronousConfiguration> در یک خط مشی Quota روی true تنظیم شود، که همچنین دارای پیکربندی ناهمزمان است که با استفاده از عنصر <AsynchronousConfiguration> تعریف شده است، در این صورت استقرار پراکسی API با شکست مواجه می شود. | build |
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که این خط مشی خطایی را ایجاد کند. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
متغیرها | کجا | مثال |
---|---|---|
fault.name=" fault_name " | fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | fault.name Matches "QuotaViolation" |
ratelimit. policy_name .failed | policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. | ratelimit.QT-QuotaPolicy.failed = true |
نمونه پاسخ خطا
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
مثال قانون خطا
<FaultRules> <FaultRule name="Quota Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "QuotaViolation") </Condition> </Step> <Condition>ratelimit.Quota-1.failed=true</Condition> </FaultRule> </FaultRules>
طرحواره ها
موضوعات مرتبط
مقایسه سهمیه، دستگیری سنبله، و خط مشی های محدودیت نرخ همزمان