Partilhar via


Limitação avançada de solicitações com o Gerenciamento de API do Azure

APLICA-SE A: Todas as camadas de gerenciamento de API

A capacidade de limitar as solicitações de entrada é uma função fundamental do Gerenciamento de API do Azure. O Gerenciamento de API permite que os provedores de API protejam suas APIs contra abusos e criem valor para diferentes camadas de produtos de API, controlando a taxa de solicitações ou o total de solicitações/dados transferidos. Este artigo descreve como criar e aplicar limites de cota e taxa.

Limites de taxa e quotas

Os limites de taxa e as quotas são utilizados para diferentes finalidades.

Limites tarifários

Os limites de taxa são geralmente usados para proteger contra explosões de volume curtas e intensas. Por exemplo, se você souber que seu serviço de back-end tem um gargalo em seu banco de dados quando os volumes de chamadas são altos, você pode definir uma rate-limit-by-key política para não permitir grandes volumes de chamadas.

Atenção

Devido à natureza distribuída da arquitetura de limitação, a limitação de taxa nunca é totalmente precisa. A diferença entre o número configurado de solicitações permitidas e o número real varia dependendo do volume e da taxa de solicitação, da latência de back-end e de outros fatores.

Quotas

As quotas são normalmente utilizadas para controlar as tarifas das chamadas durante um período de tempo mais longo. Por exemplo, podem definir o número total de chamadas que um determinado subscritor pode efetuar num determinado mês. Se você gerar receita com sua API, também poderá definir cotas de forma diferente para assinaturas baseadas em camadas. Por exemplo, uma assinatura de nível Basic pode ser capaz de fazer não mais de 10.000 chamadas por mês, mas uma camada Premium pode ser capaz de fazer 100.000.000 chamadas por mês.

No Gerenciamento de API, os limites de taxa normalmente são propagados mais rapidamente pelos nós para proteger contra picos. Em contrapartida, as informações de quota de utilização são utilizadas a longo prazo, pelo que a sua implementação é diferente.

Observação

Quando os recursos de computação subjacentes são reiniciados na plataforma de serviço, o Gerenciamento de API pode continuar a lidar com solicitações por um curto período após o atingimento de uma cota.

Limitação baseada em produtos

Os provedores de API podem usar a capacidade de limitação de taxa numa assinatura específica para aplicar limites aos desenvolvedores que se registaram para utilizar a sua API. No entanto, esse tipo de limitação não ajuda, por exemplo, com a limitação de usuários finais individuais da API. É possível que um único usuário do aplicativo do desenvolvedor consuma toda a cota e impeça que outros clientes do desenvolvedor possam usar o aplicativo. Além disso, vários clientes que geram um grande volume de solicitações podem limitar o acesso a usuários ocasionais.

Limitação personalizada baseada em chave

Observação

As rate-limit-by-key e quota-by-key políticas não estão disponíveis no nível Consumo da Gestão de API do Azure.

As políticas de taxa limite por chave e cota por chave fornecem uma solução mais flexível para o controle de tráfego. Essas políticas permitem que você defina expressões para identificar as chaves usadas para rastrear o uso do tráfego. Esta técnica é ilustrada nos exemplos seguintes.

Limitação de endereços IP

As políticas a seguir restringem um único endereço IP de cliente a apenas 10 chamadas a cada minuto e impõem um total de 1.000.000 de chamadas e 10.000 kilobytes de largura de banda por mês:

<rate-limit-by-key  calls="10"
          renewal-period="60"
          counter-key="@(context.Request.IpAddress)" />

<quota-by-key calls="1000000"
          bandwidth="10000"
          renewal-period="2629800"
          counter-key="@(context.Request.IpAddress)" />

Se todos os clientes na Internet utilizaram um endereço IP único, esta pode ser uma forma eficaz de limitar a utilização por parte do utilizador. No entanto, é provável que vários usuários estejam compartilhando um único endereço IP público porque acessam a internet por meio de um dispositivo NAT. Ainda assim, para APIs que permitem acesso não autenticado, usar IpAddress pode ser a melhor opção.

Limitação da identidade do utilizador

Se um utilizador final estiver autenticado, poderá gerar uma chave de controlo de acesso com base em informações que identifiquem unicamente o utilizador.

<rate-limit-by-key calls="10"
    renewal-period="60"
    counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Subject)" />

Este exemplo mostra como extrair o cabeçalho Authorization, convertê-lo em um JWT objeto e usar o assunto do token para identificar o usuário. Em seguida, ele usa esse valor como a chave de limitação de taxa. Se a identidade do usuário for armazenada na JWT como uma das outras declarações, esse valor poderá ser usado.

Políticas combinadas

Embora as políticas de limitação baseadas no usuário forneçam mais controle do que as políticas de limitação baseadas em assinatura, ainda há valor em combinar ambos os recursos. Para APIs monetizadas, a limitação por chave de assinatura do produto (Limitar taxa de chamadas por assinatura e Definir cota de uso por assinatura) é uma ótima maneira de implementar taxas baseadas em níveis de uso. O controle mais refinado de ser capaz de acelerar pelo usuário é complementar e evita que o comportamento de um usuário degrade a experiência de outro.

Regulação orientada para o cliente

Quando a chave de limitação é definida através de uma expressão de política, o provedor de API escolhe como a limitação é determinada. No entanto, um desenvolvedor pode querer controlar como limitar a taxa dos seus próprios clientes. O provedor de API pode habilitar esse tipo de controle introduzindo um cabeçalho personalizado para permitir que o aplicativo cliente do desenvolvedor comunique a chave para a API:

<rate-limit-by-key calls="100"
          renewal-period="60"
          counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))"/>

Essa técnica permite que o aplicativo cliente do desenvolvedor determine como criar a chave de limitação de taxa. Os desenvolvedores dos clientes podem criar os seus próprios níveis de tarifa alocando conjuntos de chaves para os utilizadores e rotacionando o uso das chaves.

Considerações sobre várias regiões ou gateways

Políticas de limitação de taxa como rate-limit, rate-limit-by-key, azure-openai-token-limit, e llm-token-limit utilizam contadores ao nível do gateway de gestão de API. Portanto, em implantações de várias regiões do Gerenciamento de API, cada gateway regional tem um contador separado e os limites de taxa são impostos separadamente para cada região. Da mesma forma, em instâncias de Gerenciamento de API com espaços de trabalho, os limites são impostos separadamente para cada gateway de espaço de trabalho.

Políticas de cota como quota e quota-by-key são globais, o que significa que um único contador é usado no nível da instância de Gerenciamento de API.

Resumo

O Gerenciamento de API fornece limitação de taxa e cota para proteger e agregar valor ao seu serviço de API. As políticas de limitação com regras de definição de âmbito personalizadas fornecem um controle mais refinado sobre essas políticas para permitir que os seus clientes criem aplicações ainda melhores. Os exemplos neste artigo demonstram o uso dessas políticas criando chaves de limitação de taxa com endereços IP do cliente, identidade do usuário e valores gerados pelo cliente. No entanto, você pode usar muitas outras partes da mensagem, como agente de usuário, fragmentos de caminho de URL e tamanho da mensagem.