Ограничение частоты звонков по ключу
ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Базовый | Базовая версия 2 | Стандартный | Standard v2 | Премия
Политика rate-limit-by-key
предотвращает пики использования API для каждого ключа, ограничивая частоту вызовов до указанного числа за определенный период времени. Ключ может содержать произвольное строковое значение и обычно указывается с помощью выражения политики. Чтобы указать, какие запросы следует учитывать для ограничения, можно добавить дополнительное условие увеличения. При превышении предела вызовов вызывающий объект получает код состояния ответа 429 Too Many Requests
.
Сведения о разнице между ограничениями скорости и квотами см. в разделе "Пределы скорости и квоты".
Внимание
Из-за распределенного строения архитектуры регулирования ограничение частоты никогда не является полностью точным. Разница между настроенным и фактическим количеством допустимых запросов зависит от их объема и частоты, задержки на стороне сервера и других факторов.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Чтобы помочь вам настроить эту политику, портал предоставляет интерактивный редактор на основе форм. Узнайте, как устанавливать или изменять политики службы управления API.
Правило политики
<rate-limit-by-key calls="number"
renewal-period="seconds"
increment-condition="condition"
increment-count="number"
counter-key="key value"
retry-after-header-name="custom header name, replaces default 'Retry-After'"
retry-after-variable-name="policy expression variable name"
remaining-calls-header-name="header name"
remaining-calls-variable-name="policy expression variable name"
total-calls-header-name="header name"/>
Атрибуты
Атрибут | Description | Обязательное поле | По умолчанию. |
---|---|---|---|
вызывает | Максимальное общее количество вызовов, разрешенных для значения ключа в течение интервала времени, указанного в параметре renewal-period . Допустимы выражения политики. |
Да | Н/П |
counter-key | Ключ, используемый для политики ограничения частоты. Для каждого значения ключа используется один счетчик для всех областей, для которых настроена политика. Допустимы выражения политики. | Да | Н/П |
increment-condition | Логическое выражение, указывающее, следует ли учитывать запрос в сторону скорости (true ). Допустимы выражения политики. |
No | Н/П |
increment-count | Число, на которое увеличивается счетчик, для каждого запроса. Допустимы выражения политики. | No | 1 |
renewal-period | Длина скользящего окна в секундах, в течение которого количество разрешенных запросов должно быть не больше значения, указанного в параметре calls . Максимально допустимое значение: 300 секунд. Допустимы выражения политики. |
Да | Н/П |
retry-after-header-name | Имя пользовательского заголовка ответа, значение которого является рекомендуемой интервалом повтора в секундах после превышения указанной скорости вызова для значения ключа. Выражения политики не допускаются. | No | Retry-After |
retry-after-variable-name | Имя переменной выражения политики, которая сохраняет рекомендуемый интервал повтора в секундах после превышения указанной скорости вызова для значения ключа. Выражения политики не допускаются. | No | Н/П |
remaining-calls-header-name | Имя заголовка ответа, значение которого после каждого выполнения политики — это число оставшихся вызовов, разрешенных для значения ключа в интервале времени, указанном в параметре renewal-period . Выражения политики не допускаются. |
No | Н/П |
remaining-calls-variable-name | Имя переменной выражения политики, которая после каждого выполнения политики сохраняет количество оставшихся вызовов, разрешенных для значения ключа в интервале времени, указанном в параметре renewal-period . Выражения политики не допускаются. |
No | Н/П |
total-calls-header-name | Имя заголовка ответа, значение которого равно значению, указанному в параметре calls . Выражения политики не допускаются. |
No | Н/П |
Использование
- Разделы политики: inbound.
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: классическая, версия 2, локальная, рабочая область
Примечания об использовании
- Управление API использует один счетчик для каждого
counter-key
значения, указанного в политике. Счетчик обновляется во всех областях, в которых политика настроена с этим значением ключа. Если вы хотите настроить отдельные счетчики в разных областях (например, определенный API или продукт), укажите разные значения ключей в разных областях. Например, добавьте строку, которая определяет область к значению выражения. - Количество ограничений скорости в локальном шлюзе можно настроить для синхронизации локально (между экземплярами шлюза между узлами кластера), например с помощью развертывания диаграмм Helm для Kubernetes или с помощью шаблонов развертывания портал Azure. Однако количество ограничений скорости не синхронизируется с другими ресурсами шлюза, настроенными в экземпляре Управление API, включая управляемый шлюз в облаке. Подробнее
Пример
В следующем примере ограничение частоты имеет значение в 10 вызовов в течение 60 секунд, а также содержит ключ, состоящий из IP-адреса вызывающего объекта. После каждого выполнения политики остальные вызовы, разрешенные для этого вызывающего IP-адреса в период времени, хранятся в переменной remainingCallsPerIP
.
<policies>
<inbound>
<base />
<rate-limit-by-key calls="10"
renewal-period="60"
increment-condition="@(context.Response.StatusCode == 200)"
counter-key="@(context.Request.IpAddress)"
remaining-calls-variable-name="remainingCallsPerIP"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
Дополнительные сведения и примеры этой политики см. в статье Расширенное регулирование запросов с помощью управления API.
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure