Limitar la tasa de llamadas por suscripción

SE APLICA A: todos los niveles de API Management

La directiva rate-limit evita los picos de uso de la API según suscripción limitando la tasa de llamadas a un número especificado por un período de tiempo establecido. Cuando se supera la tasa de llamadas, el autor de la llamada recibe un código de estado de respuesta 429 Too Many Requests.

Para comprender la diferencia entre las cuotas y los límites de frecuencia, consulte Límites y cuotas de frecuencia.

Precaución

Debido a la naturaleza distribuida de la arquitectura de limitación, el límite de velocidad nunca es completamente preciso. La diferencia entre la cantidad configurada y la cantidad real de solicitudes permitidas varía según el volumen y la frecuencia de solicitudes, la latencia del back-end y otros factores.

Nota

Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.

Instrucción de la directiva

<rate-limit calls="number" renewal-period="seconds"  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">
    <api name="API name" id="API id" calls="number" renewal-period="seconds" >
        <operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
    </api>
</rate-limit>

Atributos

Atributo Descripción Necesario Valor predeterminado
calls Número total máximo de llamadas permitidas durante el intervalo de tiempo especificado en renewal-period. No se permiten expresiones de directiva. N/D
renewal-period La longitud en segundos de la ventana deslizante durante la cual el número de solicitudes permitidas no debe superar el valor especificado en calls. Valor máximo permitido: 300 segundos. No se permiten expresiones de directiva. N/D
retry-after-header-name Nombre de un encabezado de respuesta personalizado cuyo valor es el intervalo de reintento recomendado en segundos, después de que se supere la tasa de llamadas especificada. No se permiten expresiones de directiva. No Retry-After
retry-after-variable-name Nombre de una variable que almacena el intervalo de reintento recomendado en segundos después de que se supere la tasa de llamadas especificada. No se permiten expresiones de directiva. No N/D
remaining-calls-header-name Nombre de un encabezado de respuesta cuyo valor después de cada ejecución de directiva es el número de llamadas restantes permitidas para el intervalo de tiempo especificado en renewal-period. No se permiten expresiones de directiva. No N/D
remaining-calls-variable-name Nombre de una variable que después de cada ejecución de directiva almacena el número de llamadas restantes permitidas para el intervalo de tiempo especificado en renewal-period. No se permiten expresiones de directiva. No N/D
total-calls-header-name Nombre de un encabezado de respuesta cuyo valor es el valor especificado en calls. No se permiten expresiones de directiva. No N/D

Elementos

Elemento Descripción Obligatorio
api Agregue uno o varios de estos elementos para imponer un límite de tasa de llamadas a las API del producto. Los límites de tasa de llamadas a la API y al producto se aplican de forma independiente. Se puede hacer referencia a la API a través de name o id. Si se proporcionan ambos atributos, id se usará y name se omitirá. No
operation Agregue uno o varios de estos elementos para imponer un límite de tasa de llamadas a las operaciones de una API. Los límites de tasa de llamadas se aplican de forma independiente a la API, a la operación y al producto. Se puede hacer referencia a la operación a través de name o id. Si se proporcionan ambos atributos, id se usará y name se omitirá. No

Atributos api

Atributo Descripción Necesario Valor predeterminado
name Nombre de la API a la que se va a aplicar un límite de tasa. Se debe especificar name o id. N/D
id Identificador de la API a la que se va a aplicar un límite de tasa. Se debe especificar name o id. N/D
calls Número total máximo de llamadas permitidas durante el intervalo de tiempo especificado en renewal-period. No se permiten expresiones de directiva. N/D
renewal-period La longitud en segundos de la ventana deslizante durante la cual el número de solicitudes permitidas no debe superar el valor especificado en calls. Valor máximo permitido: 300 segundos. No se permiten expresiones de directiva. N/D

Atributos operation

Atributo Descripción Necesario Valor predeterminado
name Nombre de la operación a la que se va a aplicar un límite de tasa. Se debe especificar name o id. N/D
id Identificador de la operación a la que se va a aplicar un límite de tasa. Se debe especificar name o id. N/D
calls Número total máximo de llamadas permitidas durante el intervalo de tiempo especificado en renewal-period. No se permiten expresiones de directiva. N/D
renewal-period La longitud en segundos de la ventana deslizante durante la cual el número de solicitudes permitidas no debe superar el valor especificado en calls. Valor máximo permitido: 300 segundos. No se permiten expresiones de directiva. N/D

Uso

Notas de uso

  • Esta directiva se puede usar una sola vez por definición de directiva.
  • Esta directiva solo se aplica cuando se accede a una API mediante una clave de suscripción.
  • Los recuentos de límites de volumen en una puerta de enlace autohospedada se pueden configurar para sincronizarse localmente (entre instancias de puerta de enlace en nodos de clúster), por ejemplo, mediante la implementación de gráficos de Helm para Kubernetes o con las plantillas de implementación de Azure Portal. Pero los recuentos de límites de volumen no se sincronizan con otros recursos de puerta de enlace configurados en la instancia de API Management, incluida la puerta de enlace administrada en la nube. Más información

Ejemplo

En el ejemplo siguiente, el límite de tasa por suscripción es de 20 llamadas por 90 segundos. Después de cada ejecución de directiva, las llamadas restantes permitidas en el período de tiempo se almacenan en la variable remainingCallsPerSubscription.

<policies>
    <inbound>
        <base />
        <rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Para más información sobre el trabajo con directivas, vea: