Guida introduttiva: Impostare i limiti di frequenza delle richieste

Nota

Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.

Questo articolo si applica a:❌ Basic/Standard ✔️ Enterprise

Questa guida introduttiva illustra come impostare i limiti di frequenza delle richieste usando Spring Cloud Gateway nel piano Enterprise di Azure Spring Apps.

La limitazione della frequenza consente di evitare problemi che si verificano con picchi di traffico. Quando si impostano limiti di frequenza delle richieste, l'applicazione può rifiutare richieste eccessive. Questa configurazione consente di ridurre al minimo gli errori di limitazione e prevedere in modo più accurato la velocità effettiva.

Prerequisiti

Impostare i limiti di frequenza delle richieste

Spring Cloud Gateway include filtri di route dalla versione Open Source e diversi altri filtri di route. Uno di questi filtri è Il filtro RateLimit: Limitazione delle richieste utente. Il filtro RateLimit limita il numero di richieste consentite per ogni route durante un intervallo di tempo.

Quando si definisce una route, è possibile aggiungere il filtro RateLimit includendolo nell'elenco dei filtri per la route. Il filtro accetta quattro opzioni:

  • Numero di richieste accettate durante la finestra.
  • Durata della finestra. Questo valore è espresso in millisecondi per impostazione predefinita, ma è possibile specificare un suffisso di s, m o h per indicare che il valore è espresso in secondi, minuti o ore.
  • (Facoltativo) Chiave di partizione utente. È anche possibile applicare una limitazione della velocità per utente. Ovvero, diversi utenti possono avere la propria velocità effettiva consentita in base a un identificatore trovato nella richiesta. Indicare se la chiave si trova in un'attestazione JWT o un'intestazione HTTP con claim o header sintassi.
  • (Facoltativo) È possibile limitare la frequenza in base a indirizzi IP, ma non in combinazione con la limitazione della velocità per utente.

L'esempio seguente limita tutti gli utenti a due richieste ogni cinque secondi alla /products route:

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

Se si vuole esporre una route per diversi set di utenti, ognuna identificata dalla propria client_id intestazione HTTP, usare la definizione di route seguente:

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

Quando viene superato il limite, le risposte avranno esito negativo con 429 Too Many Requests stato.

Usare il comando seguente per applicare il RateLimit filtro alla /products route:

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

Usare i comandi seguenti per recuperare l'URL per la /products route in 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"

Effettuare diverse richieste all'URL per /products entro un periodo di cinque secondi per visualizzare che le richieste hanno esito negativo con uno stato 429 Too Many Requests.

Pulire le risorse

Se si prevede di usare le guide di avvio rapido e le esercitazioni successive, è consigliabile non cancellare le risorse create. Quando non è più necessario, eliminare il gruppo di risorse per eliminare tutte le risorse contenute al suo interno. Per eliminare il gruppo di risorse usando l'interfaccia della riga di comando di Azure, usare i comandi seguenti:

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

Passaggi successivi

Continuare con uno degli argomenti di avvio rapido facoltativi seguenti: