Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Что
Используйте политику квот, чтобы настроить количество сообщений запросов, которые прокси-сервер API разрешает за определенный период времени, например минуту, час, день, неделю или месяц. Вы можете установить одинаковую квоту для всех приложений, обращающихся к прокси-серверу API, или установить квоту на основе:
- Продукт, содержащий прокси API
- Приложение, запрашивающее API
- Разработчик приложения
- Многие другие критерии
Не используйте квоту для защиты от общего всплеска трафика. Для этого используйте политику Spike Arrest. См. политику пикового ареста .
Видео
Эти видеоролики знакомят с управлением квотами с помощью политики квот:
Введение (Новый край)
Введение (Классический край)
Динамическая квота
Распределенный и синхронный
Вес сообщения
Календарь
Роллинг окно
Гибкий
Условная квота
Переменные потока
Обработка ошибок
Образцы
Эти примеры кода политики иллюстрируют, как начинать и заканчивать периоды действия квоты следующим образом:
Более динамичная квота
<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. Вы также должны добавить политику квот к прокси-серверу API, который считывает эти значения. Дополнительные сведения см. в разделе Создание продуктов API .
В приведенном выше примере прокси-сервер API, содержащий политику квот, использует политику VerifyAPIKey с именемverify verify-api-key
для проверки ключа API, переданного в запросе. Затем политика квот обращается к переменным потока из политики VerifyAPIKey, чтобы прочитать значения квоты, установленные для продукта API. Дополнительные сведения о переменных потока VerifyAPIKey см. в разделе Политика Verify API Key .
Другой вариант — установить настраиваемые атрибуты для отдельных разработчиков или приложений, а затем прочитать эти значения в политике квот. Например, вы хотите установить разные значения квот для каждого разработчика. В этом случае вы устанавливаете для разработчика пользовательские атрибуты, содержащие лимит, единицу времени и интервал. Затем вы ссылаетесь на эти значения в политике квот, как показано ниже:
<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 для ссылки на настраиваемые атрибуты, установленные разработчиком.
Вы можете использовать любую переменную для установки параметров политики квот. Эти переменные могут быть получены из:
- Переменные потока
- Свойства продукта, приложения или разработчика API
- Карта ключевых значений (KVM)
- Заголовок, параметр запроса, параметр формы и т. д.
Для каждого прокси API вы можете добавить политику квот, которая либо ссылается на ту же переменную, что и все другие политики квот во всех других прокси, либо политика квот может ссылаться на переменные, уникальные для этой политики и прокси.
Время начала
<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>
. Значением времени является время по Гринвичу, а не местное время. Если вы не укажете значение <StartTime>
для политики типа calendar
, Edge выдаст ошибку.
Счетчик квоты для каждого приложения обновляется на основе значений <StartTime>
, <Interval>
и <TimeUnit>
. В этом примере квота начинает отсчет в 10:30 по Гринвичу 18 февраля 2017 г. и обновляется каждые 5 часов. Таким образом, следующее обновление состоится в 15:30 по Гринвичу 18 февраля 2017 года.
Счетчик доступа
<Quota name="QuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Прокси-сервер API имеет доступ к переменным потока, установленным политикой квот. Вы можете получить доступ к этим переменным потока в прокси-сервере API, чтобы выполнить условную обработку, отслеживать политику, когда она приближается к пределу квоты, возвращать текущий счетчик квоты в приложение или по другим причинам.
Поскольку доступ к переменным потока для политики основан на атрибуте name
политики, для политики с именем QuotaPolicy
, указанной выше, вы получаете доступ к ее переменным потока в форме:
-
ratelimit.QuotaPolicy.allowed.count
: разрешенное количество. -
ratelimit.QuotaPolicy.used.count
: Текущее значение счетчика. -
ratelimit.QuotaPolicy.expiry.time
: время в формате UTC, когда счетчик сбрасывается.
Существует множество других переменных потока, к которым вы можете получить доступ, как описано ниже.
Например, вы можете использовать следующую политику AssignMessage для возврата значений переменных потока квоты в качестве заголовков ответа:
<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>
Используйте этот пример кода, чтобы обеспечить соблюдение квоты в 10 000 вызовов в час. Политика сбрасывает счетчик квоты в начале каждого часа. Если счетчик достигает квоты в 10 000 вызовов до конца часа, вызовы, превышающие 10 000, отклоняются.
Например, если счетчик запускается в 2017-07-08 07:00:00
, то он сбрасывается до 0 в 2017-07-08 08:00:00
(1 час с момента начала). Если первое сообщение получено в 2017-07-08 07:35:28
и количество сообщений достигает 10 000 до 2017-07-08 08:00:00
, вызовы, превышающие это количество, отклоняются до тех пор, пока счетчик не обнулится в верхней части списка. час.
Время сброса счетчика основано на комбинации <Interval>
и <TimeUnit>
. Например, если вы установите для <Interval>
значение 12 для <TimeUnit>
часа, счетчик сбрасывается каждые двенадцать часов. Вы можете установить <TimeUnit>
на минуту, час, день, неделю или месяц.
Вы можете ссылаться на эту политику в нескольких местах вашего прокси-сервера API. Например, вы можете поместить его в Proxy PreFlow, чтобы он выполнялся при каждом запросе. Или вы можете разместить его в нескольких потоках прокси-сервера API. Если вы используете эту политику в нескольких местах прокси-сервера, она поддерживает один счетчик, который обновляется всеми экземплярами политики.
Альтернативно вы можете определить несколько политик квот в своем прокси-сервере 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>
По умолчанию политика квот определяет один счетчик для прокси-сервера API, независимо от источника запроса. Альтернативно вы можете использовать атрибут <Identifier>
с политикой квот для ведения отдельных счетчиков на основе значения атрибута <Identifier>
.
Например, используйте тег <Identifier>
, чтобы определить отдельные счетчики для каждого идентификатора клиента. При запросе к вашему прокси клиентское приложение затем передает заголовок, содержащий clientID
, как показано в примере выше.
В атрибуте <Identifier>
можно указать любую переменную потока. Например, вы можете указать, что параметр запроса с именем id
содержит уникальный идентификатор:
<Identifier ref="request.queryparam.id"/>
Если вы используете политику VerifyAPIKey для проверки ключа API или политики OAuthV2 с токенами OAuth, вы можете использовать информацию в ключе или токене API для определения отдельных счетчиков для одной и той же политики квот. Например, следующий тег <Identifier>
использует переменную потока client_id
политики VerifyAPIKey с именемverify verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Каждое уникальное значение client_id
теперь определяет свой собственный счетчик в политике квот.
Сорт
<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
. Если заголовок имеет недопустимое значение, политика возвращает ошибку нарушения квоты.
О политике квотирования
Квота — это распределение сообщений с запросами, которые прокси-сервер API может обрабатывать в течение определенного периода времени, например минуты, часа, дня, недели или месяца. Политика поддерживает счетчики, которые подсчитывают количество запросов, полученных прокси-сервером API. Эта возможность позволяет поставщикам API устанавливать ограничения на количество вызовов API, выполняемых приложениями за определенный промежуток времени. Используя политики квот, вы можете, например, ограничить приложения до 1 запроса в минуту или до 10 000 запросов в месяц.
Например, если квота определена как 10 000 сообщений в месяц, ограничение скорости начинается после 10 000-го сообщения. Не имеет значения, было ли подсчитано 10 000 сообщений в первый или последний день этого периода; дополнительная область запросов не допускается до тех пор, пока счетчик квоты не будет автоматически сброшен в конце указанного интервала времени или пока квота не будет явно сброшена с помощью политики сброса квоты .
Вариант квоты под названием SpikeArrest предотвращает всплески (или всплески) трафика, которые могут быть вызваны внезапным увеличением использования, ошибками клиентов или злонамеренными атаками. Дополнительную информацию о SpikeArrest см. в разделе Политика Spike Arrest .
Квоты применяются к отдельным прокси API и не распределяются между прокси API. Например, если у вас есть три прокси-сервера API в продукте API, одна квота не будет использоваться всеми тремя, даже если все три используют одну и ту же конфигурацию политики квот.
Типы политики квот
Политика квот поддерживает несколько различных типов политик: по умолчанию, calendar
, flexi
и rollingwindow
. Каждый тип определяет, когда счетчик квот запускается и когда он сбрасывается, как показано в следующей таблице:
Единица времени | Сброс по умолчанию (или нулевой) | сброс календаря | гибкий сброс |
---|---|---|---|
минута | Начало следующей минуты | Через минуту после <StartTime> | Через минуту после первого запроса |
час | Начало следующего часа | Через час после <StartTime> | Через час после первого запроса |
день | Полночь по Гринвичу текущего дня | Через 24 часа после <StartTime> | 24 часа после первого запроса |
неделя | Полночь по Гринвичу в воскресенье в конце недели | Через неделю после <StartTime> | Через неделю после первого запроса |
месяц | Полночь по Гринвичу последнего дня месяца | Через месяц (28 дней) после <StartTime> | Один месяц (28 дней) после первого запроса |
Для type="calendar"
необходимо указать значение <StartTime>
.
В таблице не указано значение для типа rollingwindow
. Квоты скользящего окна работают путем установки размера «окна» квоты, например окна в один час или один день. Когда поступает новый запрос, политика определяет, была ли превышена квота в прошлом «окне» времени.
Например, вы определяете двухчасовой интервал, позволяющий обрабатывать 1000 запросов. Новый запрос поступает в 16:45. Политика вычисляет количество квот за последние два часа, то есть количество запросов с 14:45. Если предел квоты не был превышен в течение этого двухчасового окна, запрос разрешается.
Через минуту, в 16:46, поступает еще один запрос. Теперь политика вычисляет количество квот с 14:46, чтобы определить, превышен ли лимит.
Для типа rollingwindow
счетчик никогда не сбрасывается, а пересчитывается при каждом запросе.
Общие сведения о счетчиках квот
По умолчанию политика квот поддерживает один счетчик, независимо от того, сколько раз вы ссылаетесь на него в прокси-сервере API. Имя счетчика квот основано на атрибуте name
политики.
Например, вы создаете политику квот с именем MyQuotaPolicy
с ограничением в 5 запросов и размещаете ее в нескольких потоках (поток A, B и C) в прокси-сервере API. Несмотря на то, что он используется в нескольких потоках, он поддерживает один счетчик, который обновляется всеми экземплярами политики:
- Выполняется поток A -> выполняется MyQuotaPolicy и его счетчик = 1.
- Выполняется поток B -> выполняется MyQuotaPolicy и его счетчик = 2
- Выполняется поток A -> выполняется MyQuotaPolicy и его счетчик = 3.
- Выполняется поток C -> выполняется MyQuotaPolicy и его счетчик = 4.
- Выполняется поток A -> выполняется MyQuotaPolicy и его счетчик = 5.
Следующий запрос к любому из трех потоков отклоняется, поскольку счетчик квот достиг своего предела.
Использование одной и той же политики квот в более чем одном месте в потоке прокси API, что может непреднамеренно привести к исчерпанию квоты быстрее, чем вы ожидали, является антишаблоном, описанным в Книге антишаблонов Apigee Edge .
Альтернативно вы можете определить несколько политик квот в своем прокси-сервере API и использовать разные политики в каждом потоке. Каждая политика квот имеет собственный счетчик, основанный на атрибуте name
политики.
Или используйте элементы <Class>
или <Identifier>
в политике квот, чтобы определить несколько уникальных счетчиков в одной политике. Используя эти элементы, одна политика может поддерживать разные счетчики в зависимости от приложения, отправляющего запрос, разработчика приложения, отправляющего запрос, идентификатора клиента или другого идентификатора клиента и т. д. Дополнительные сведения об использовании элементов <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.*
приведенные ниже, доступны по умолчанию, когда политика проверки ключа API под названием «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 async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
Следующие атрибуты относятся только к этой политике.
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
тип | Используйте, чтобы определить, когда и как счетчик квот проверяет использование квоты. Дополнительные сведения см. в разделе Типы политик квот . Если вы опустите значение Допустимые значения включают в себя:
| календарь | Необязательный |
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name
, чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
---|---|
Присутствие | Необязательный |
Тип | Нить |
Элемент <Разрешить>
Указывает ограничение количества для квоты. Если счетчик политики достигает этого предельного значения, последующие вызовы отклоняются до тех пор, пока счетчик не будет сброшен.
Ниже показаны три способа установки элемента <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
.
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Целое число |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
считать | Используйте, чтобы указать количество сообщений для квоты. Например, значение атрибута | 2000 г. | Необязательный |
countRef | Используйте для указания переменной потока, содержащей количество сообщений для квоты. | никто | Необязательный |
Элемент <Разрешить>/<Класс>
Элемент <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>
В этом примере текущий счетчик квоты определяется значением параметра запроса time_variable
, передаваемого с каждым запросом. Эта переменная может иметь peak_time
или off_peak_time
. Если параметр запроса содержит недопустимое значение, политика возвращает ошибку нарушения квоты.
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
ссылка | Используйте для указания переменной потока, содержащей класс квоты. | никто | Необходимый |
Элемент <Разрешить>/<Класс>/<Разрешить>
Элемент <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>
В этом примере политика квот поддерживает два счетчика квот с peak_time
и off_peak_time
.
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
сорт | Определяет имя счетчика квот. | никто | Необходимый |
считать | Указывает предел квоты для счетчика. | никто | Необходимый |
Элемент <Интервал>
Используйте для указания целого числа (например, 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,
указывается дата и время, когда счетчик квоты начнет отсчет, независимо от того, были ли получены какие-либо запросы от каких-либо приложений.
Вы должны указать явное StartTime
, если для type
явно задано значение calendar,
Вы не можете использовать ссылку на переменную потока. Если вы укажете значение StartTime
, когда значение type
не установлено, вы получите сообщение об ошибке.
Например:
<StartTime>2017-7-16 12:00:00</StartTime>
По умолчанию: | никто |
Присутствие: | Требуется, если type установлен calendar . |
Тип: | Строка в формате даты и времени ISO 8601 . |
<Распределенный> элемент
Установка Edge может использовать один или несколько процессоров сообщений для обработки запросов. Установите для этого элемента значение true
, чтобы указать, что политика должна поддерживать центральный счетчик и постоянно синхронизировать его между всеми процессорами сообщений. Обработчики сообщений могут находиться в разных зонах и/или регионах доступности.
Если вы используете значение по умолчанию false
, вы можете превысить свою квоту, поскольку счетчик для каждого процессора сообщений не является общим:
<Distributed>true</Distributed>
Чтобы гарантировать, что счетчики синхронизируются и обновляются при каждом запросе, установите для <Distributed>
и <Synchronous>
значение true:
<Distributed>true</Distributed> <Synchronous>true</Synchronous>
По умолчанию: | ЛОЖЬ |
Присутствие: | Необязательный |
Тип: | логическое значение |
Элемент <Синхронный>
Установите значение true
, чтобы синхронно обновлять счетчик распределенных квот. Это означает, что обновление счетчика производится одновременно с проверкой квоты по запросу к API. Установите значение true
, если важно не разрешать вызовы API сверх квоты.
Установите значение false
, чтобы счетчик квот обновлялся асинхронно. Это означает, что возможно, что некоторые вызовы API, превышающие квоту, будут выполнены, в зависимости от того, когда счетчик квоты в центральном репозитории будет асинхронно обновляться. Однако вы не столкнетесь с потенциальным снижением производительности, связанным с синхронными обновлениями.
Интервал асинхронного обновления по умолчанию составляет 10 секунд. Используйте элемент AsynchronousConfiguration
чтобы настроить это асинхронное поведение.
<Synchronous>false</Synchronous>
По умолчанию: | ЛОЖЬ |
Присутствие: | Необязательный |
Тип: | логическое значение |
Элемент <AsynchronousConfiguration>
Настраивает интервал синхронизации между счетчиками распределенных квот, когда элемент конфигурации политики <Synchronous>
либо отсутствует, либо присутствует и имеет значение false
.
Вы можете синхронизировать либо по истечении периода времени, либо по количеству сообщений, используя дочерние элементы SyncIntervalInSeconds
или SyncMessageCount
. Они взаимоисключающие. Например,
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
или
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
По умолчанию: | СинкИнтервалИнСекондс = 10 секунд |
Присутствие: | Необязательный; игнорируется, если для <Synchronous> установлено значение true . |
Тип: | Сложный |
Элемент <AsynchronousConfiguration>/<SyncIntervalInSeconds>
Используйте это, чтобы переопределить поведение по умолчанию, при котором асинхронные обновления выполняются через интервал в 10 секунд.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
Интервал синхронизации должен составлять >= 10 секунд, как описано в разделе «Ограничения» .
По умолчанию: | 10 |
Присутствие: | Необязательный |
Тип: | Целое число |
Элемент <AsynchronousConfiguration>/<SyncMessageCount>
Указывает количество запросов между всеми процессорами сообщений Apigee между обновлениями квоты.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
В этом примере указано, что счетчик квот обновляется каждые 5 запросов в каждом процессоре сообщений Apigee Edge.
По умолчанию: | н/д |
Присутствие: | Необязательный |
Тип: | Целое число |
Элемент <Идентификатор>
Используйте элемент <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"/>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Нить |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
ссылка | Указывает переменную потока, которая идентифицирует счетчик, используемый для запроса. Идентификатор может представлять собой HTTP-заголовок, параметр запроса, параметр формы или содержимое сообщения, уникальное для каждого приложения, пользователя приложения, разработчика приложения, продукта API или другой характеристики. В некоторых случаях настройки квоты необходимо получить, если | Н/Д | Необязательный |
Элемент <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"/>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Целое число |
Переменные потока
Следующие предопределенные переменные потока автоматически заполняются при выполнении политики квот. Дополнительные сведения о переменных потока см. в разделе Справочник по переменным .
Переменные | Тип | Разрешения | Описание |
---|---|---|---|
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}.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}.failed | логическое значение | Только для чтения | Указывает, произошла ли ошибка политики (истина или ложь). |
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
Код неисправности | Статус HTTP | Причина | Исправить |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference | 500 | Происходит, если элемент <Interval> не определен в политике квот. Этот элемент является обязательным и используется для указания интервала времени, применимого к квоте. Временной интервал может составлять минуты, часы, дни, недели или месяцы, как определено элементом <TimeUnit> . | build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference | 500 | Происходит, если элемент <TimeUnit> не определен в политике квот. Этот элемент является обязательным и используется для указания единицы времени, применимой к квоте. Временной интервал может составлять минуты, часы, дни, недели или месяцы. | build |
policies.ratelimit.InvalidMessageWeight | 500 | Происходит, если значение элемента <MessageWeight> , указанное через переменную потока, недопустимо (нецелое значение). | build |
policies.ratelimit.QuotaViolation | 500 | Превышен лимит квоты. | Н/Д |
Ошибки развертывания
Название ошибки | Причина | Исправить |
---|---|---|
InvalidQuotaInterval | Если интервал квоты, указанный в элементе <Interval> , не является целым числом, развертывание прокси-сервера API завершается неудачно. Например, если в элементе <Interval> указан интервал квоты, равный 0,1, развертывание прокси-сервера 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 квоты. Например, если в элементе <Quota> для атрибута type установлено значение flexi или rolling window , развертывание прокси-сервера API завершится сбоем. | build |
InvalidTimeUnitForDistributedQuota | Если для элемента <Distributed> установлено значение true , а для элемента <TimeUnit> установлено значение second , развертывание прокси-сервера API завершается неудачей. Параметр timeunit second недопустим для распределенной квоты. | build |
InvalidSynchronizeIntervalForAsyncConfiguration | Если значение, указанное для элемента <SyncIntervalInSeconds> в элементе <AsynchronousConfiguration> в политике квот, меньше нуля, развертывание прокси-сервера API завершается неудачей. | build |
InvalidAsynchronizeConfigurationForSynchronousQuota | Если для значения элемента <AsynchronousConfiguration> установлено значение true в политике квот, которая также имеет асинхронную конфигурацию, определенную с помощью элемента <AsynchronousConfiguration> , то развертывание прокси-сервера API завершается неудачей. | build |
Переменные неисправности
Эти переменные устанавливаются, когда эта политика вызывает ошибку. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
Переменные | Где | Пример |
---|---|---|
fault.name=" fault_name " | fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. | 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>
Схемы
Связанные темы
Сравнение политик квот, пикового ареста и ограничения одновременных ставок