Compartir vía


Limitar la tasa de llamadas por clave

SE APLICA A: Desarrollador | Básico | Básico v2 | Estándar | Estándar v2 | Premium

La directiva rate-limit-by-key evita los picos de uso de la API según clave limitando la tasa de llamadas a un número especificado por un período de tiempo establecido. La clave puede tener un valor de cadena arbitrario y normalmente se proporciona mediante una expresión de directiva. Puede agregarse una condición de incremento opcional para especificar qué solicitudes se deben contar para este límite. 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. Para que pueda configurar esta directiva, el portal proporciona un editor guiado basado en formularios. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.

Instrucción de la directiva

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   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"/> 

Atributos

Atributo Descripción Necesario Valor predeterminado
calls Número total máximo de llamadas permitidas para el valor de clave durante el intervalo de tiempo especificado en el renewal-period. Se permiten expresiones de directiva. N/D
counter-key Clave que se usa para la directiva de límite de tasa. En cada valor de clave, se usa un único contador para todos los ámbitos en los que se configura la directiva. Se permiten expresiones de directiva. N/D
increment-condition Expresión booleana que especifica si la solicitud se debe contar para la tasa (true). Se permiten expresiones de directiva. No N/D
increment-count Número por el que aumenta el contador por solicitud. Se permiten expresiones de directiva. No 1
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. 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 para el valor de clave. No se permiten expresiones de directiva. No Retry-After
retry-after-variable-name Nombre de una variable de expresión de directiva que almacena el intervalo de reintento recomendado en segundos después de que se supere la tasa de llamadas especificada para el valor de clave. 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 valor de clave en el intervalo de tiempo especificado en el renewal-period. No se permiten expresiones de directiva. No N/D
remaining-calls-variable-name Nombre de una variable de expresión de directiva que después de cada ejecución de directiva almacena el número de llamadas restantes permitidas para el valor de clave en el intervalo de tiempo especificado en el 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

Uso

Notas de uso

  • API Management usa un único contador para cada valor counter-key que especifique en la directiva. El contador se actualiza en todos los ámbitos en los que la directiva está configurada con ese valor de clave. Si quiere configurar contadores independientes en distintos ámbitos (por ejemplo, una API o un producto específicos), especifique valores de clave diferentes en los distintos ámbitos. Por ejemplo, anexe una cadena que identifique el ámbito al valor de una expresió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 de 10 llamadas por 60 segundos se establece según la dirección IP del autor de la llamada. Después de cada ejecución de directiva, las llamadas restantes permitidas para esa dirección IP del autor de llamada en el período de tiempo se almacenan en la variable remainingCallsPerIP.

<policies>
    <inbound>
        <base />
        <rate-limit-by-key calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Para obtener más información y ver ejemplos de esta directiva, consulte Limitación avanzada de solicitudes con Azure API Management.

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