Краткое руководство. Установка ограничений скорости запросов

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья относится к:❌ Basic/Standard ✔️ Enterprise

В этом кратком руководстве показано, как задать ограничения скорости запросов с помощью Spring Cloud Gateway в плане Azure Spring Apps Enterprise.

Ограничение скорости позволяет избежать проблем, возникающих с пиками трафика. При установке ограничений скорости запросов приложение может отклонять чрезмерные запросы. Эта конфигурация помогает свести к минимуму ошибки регулирования и более точно прогнозировать пропускную способность.

Необходимые компоненты

Установка ограничений частоты запросов

Spring Cloud Gateway включает фильтры маршрутов из версии Open Source и несколько других фильтров маршрутов. Одним из этих фильтров является RateLimit: ограничение фильтра запросов пользователей. Фильтр RateLimit ограничивает количество запросов, разрешенных для каждого маршрута в течение периода времени.

При определении маршрута можно добавить фильтр RateLimit, включив его в список фильтров для маршрута. Фильтр принимает четыре варианта:

  • Количество запросов, принятых во время окна.
  • Длительность окна. Это значение находится в миллисекундах по умолчанию, но можно указать суффикс s, m или h , чтобы указать, что значение находится в секундах, минутах или часах.
  • (Необязательно) Ключ секции пользователя. Вы также можете применить ограничение скорости для каждого пользователя. То есть разные пользователи могут иметь собственную пропускную способность в зависимости от идентификатора, найденного в запросе. Указывает, находится ли ключ в утверждении JWT или заголовке HTTP с claim или header синтаксисом.
  • (Необязательно) Вы можете ограничить скорость по IP-адресам, но не в сочетании с ограничением скорости для каждого пользователя.

Следующий пример ограничивает всех пользователей двумя запросами каждые пять секунд до /products маршрута:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

Если вы хотите предоставить маршрут для разных наборов пользователей, каждый из них определяется собственным client_id заголовком HTTP, используйте следующее определение маршрута:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

При превышении предела ответы завершаются ошибкой с состоянием 429 Too Many Requests .

Используйте следующую команду, чтобы применить RateLimit фильтр к маршруту /products :

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

Используйте следующие команды, /products чтобы получить URL-адрес маршрута в Spring Cloud Gateway:

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

Выполните несколько запросов к URL-адресу /products в течение пяти секунд, чтобы увидеть, что запросы завершаются сбоем с состоянием 429 Too Many Requests.

Очистка ресурсов

Если вы планируете продолжить работу с последующими краткими руководствами и статьями, эти ресурсы можно не удалять. Удалите ненужную группу ресурсов. Ресурсы в ней будут также удалены. Чтобы удалить группу ресурсов с помощью Azure CLI, используйте следующие команды:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Следующие шаги

Перейдите к любому из следующих необязательных кратких руководств: