Inicio rápido: Establecimiento de límites de velocidad de solicitudes

Nota

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

La información de este artículo puede ponerse en práctica en:❌ Básico o Estándar ✔️ Enterprise

En este artículo de inicio rápido se muestra cómo establecer los límites de velocidad de las solicitudes mediante Spring Cloud Gateway en el plan Enterprise de Azure Spring Apps.

La limitación de la velocidad le permite evitar problemas que surgen con los picos de tráfico. Al establecer los límites de velocidad de las solicitudes, la aplicación puede rechazar el exceso de solicitudes. Esta configuración le ayuda a minimizar los errores de limitación y a predecir con más precisión el rendimiento.

Requisitos previos

Establecimiento de límites de velocidad de las solicitudes

Spring Cloud Gateway incluye filtros de ruta de la versión de código abierto y varios filtros de ruta más. Uno de estos filtros es RateLimit: filtro de limitación de las solicitudes de usuario. El filtro RateLimit limita el número de solicitudes permitidas por ruta durante un período de tiempo.

Al definir una ruta, para agregar el filtro RateLimit, puede incluirlo en la lista de filtros de la ruta. El filtro acepta cuatro opciones:

  • El número de solicitudes que se aceptan durante la ventana.
  • La duración de la ventana. Este valor está en milisegundos de manera predeterminada, pero puede especificar un sufijo de s, m o h para indicar que el valor está en segundos, minutos u horas.
  • (Opcional) Una clave de partición de usuario. También puede aplicar la limitación de velocidad por usuario. Es decir, los distintos usuarios pueden tener su propio rendimiento permitido en función de un identificador que se encuentra en la solicitud. Indica si la clave está en una notificación JWT o encabezado HTTP con sintaxis claim o header.
  • (Opcional) Puede limitar la velocidad por direcciones IP, pero no en combinación con la limitación de velocidad por usuario.

En el ejemplo siguiente todos los usuarios están limitados a dos solicitudes cada cinco segundos a la ruta /products:

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

Si quiere exponer una ruta para distintos conjuntos de usuarios, cada uno identificado por su propio encabezado HTTP client_id, use la siguiente definición de ruta:

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

Cuando se supera el límite, se producirá un error en las respuestas con el estado 429 Too Many Requests.

Use el siguiente comando para aplicar el filtro RateLimit a la ruta /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

Use los siguientes comandos para recuperar la dirección URL de la ruta /products en 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"

Envíe varias solicitudes de /products a la dirección URL dentro de un período de cinco segundos para ver que las solicitudes producen un error con estado 429 Too Many Requests.

Limpieza de recursos

Si planea seguir trabajando en otros inicios rápidos y tutoriales, considere la posibilidad de dejar estos recursos activos. Cuando ya no lo necesite, elimine el grupo de recursos, que elimina los recursos que contiene. Para eliminar el grupo de recursos mediante la CLI de Azure, use estos comandos:

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

Pasos siguientes

Continúe con cualquiera de los siguientes artículos de inicio rápido opcionales: