Поделиться через


Ограничение частоты звонков по ключу

ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Базовый | Базовая версия 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 Н/П

Использование

Примечания об использовании

  • Управление 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.

Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.