Guia de início rápido: definir limites de taxa de solicitação

Nota

Azure Spring Apps é o novo nome para o serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns lugares por um tempo enquanto trabalhamos para atualizar ativos, como capturas de tela, vídeos e diagramas.

Este artigo aplica-se a:❌ Basic/Standard ✔️ Enterprise

Este guia de início rápido mostra como definir limites de taxa de solicitação usando o Spring Cloud Gateway no plano do Azure Spring Apps Enterprise.

A limitação de taxa permite evitar problemas que surgem com picos de tráfego. Quando você define limites de taxa de solicitação, seu aplicativo pode rejeitar solicitações excessivas. Essa configuração ajuda a minimizar erros de limitação e prever a taxa de transferência com mais precisão.

Pré-requisitos

Definir limites de taxa de solicitação

O Spring Cloud Gateway inclui filtros de rota da versão Open Source e vários outros filtros de rota. Um desses filtros é o filtro RateLimit: Limitando solicitações do usuário. O filtro RateLimit limita o número de solicitações permitidas por rota durante uma janela de tempo.

Ao definir uma rota, você pode adicionar o filtro RateLimit incluindo-o na lista de filtros para a rota. O filtro aceita quatro opções:

  • O número de solicitações aceitas durante a janela.
  • A duração da janela. Esse valor está em milissegundos por padrão, mas você pode especificar um sufixo de s, m ou h para indicar que o valor está em segundos, minutos ou horas.
  • (Opcional) Uma chave de partição do usuário. Você também pode aplicar limite de taxa por usuário. Ou seja, diferentes usuários podem ter sua própria taxa de transferência permitida com base em um identificador encontrado na solicitação. Indique se a chave está em uma declaração JWT ou cabeçalho HTTP com claim ou header sintaxe.
  • (Opcional) Você pode limitar a taxa por endereços IP, mas não em combinação com a limitação de taxa por usuário.

O exemplo a seguir limitaria todos os usuários a duas solicitações a cada cinco segundos para a /products rota:

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

Se você quiser expor uma rota para diferentes conjuntos de usuários, cada um identificado por seu próprio client_id cabeçalho HTTP, use a seguinte definição de rota:

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

Quando o limite é excedido, as respostas falharão com 429 Too Many Requests o status.

Use o seguinte comando para aplicar o RateLimit filtro à /products rota:

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

Use os seguintes comandos para recuperar a URL da /products rota no 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"

Faça várias solicitações para a URL dentro /products de um período de cinco segundos para ver as solicitações falharem com um status 429 Too Many Requests.

Clean up resources (Limpar recursos)

Se você planeja continuar trabalhando com guias de início rápido e tutoriais subsequentes, convém deixar esses recursos no lugar. Quando não for mais necessário, exclua o grupo de recursos, que exclui os recursos do grupo de recursos. Para excluir o grupo de recursos usando a CLI do Azure, use os seguintes comandos:

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

Próximos passos

Continue para qualquer um dos seguintes inícios rápidos opcionais: