Partilhar via


Limitação de pedidos avançada com a Gestão de API do Azure

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

Ser capaz de limitar as solicitações de entrada é uma função fundamental do Gerenciamento de API do Azure. Controlando a taxa de solicitações ou o total de solicitações/dados transferidos, 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.

Limites de taxa e quotas

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

Limites de taxa

Normalmente, os limites de taxa são utilizados para proteger contra picos de volume curtos e intensos. Por exemplo, se você souber que seu serviço de back-end tem um gargalo em seu banco de dados com um alto volume de chamadas, poderá definir uma rate-limit-by-key política para não permitir alto volume de chamadas usando essa configuração.

Atenção

Devido à natureza distribuída da arquitetura de limitação, a limitação de taxa nunca é completamente precisa. A diferença entre o número configurado e o número real dos pedidos permitidos varia em função do volume e taxa de pedido, da latência de back-end e de outros fatores.

Quotas

Normalmente, as quotas são utilizadas para controlar as taxas de 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. Para rentabilizar a sua API, as quotas também podem ser definidas de forma diferente para subscrições baseadas em escalões. Por exemplo, uma subscrição do escalão Básico pode não conseguir efetuar mais de 10 000 chamadas por mês, mas um escalão Premium pode ir até 100 000 000 chamadas por mês.

No Gerenciamento de API do Azure, os limites de taxa normalmente são propagados mais rapidamente pelos nós para proteger contra picos. Em contrapartida, as informações sobre as quotas de utilização são utilizadas a mais longo prazo e, por conseguinte, a sua aplicação é diferente.

Nota

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 recursos de limitação de taxa que têm como escopo uma assinatura específica são úteis para que o provedor de API aplique limites aos desenvolvedores que se inscreveram para usar sua API. No entanto, isso não ajuda, por exemplo, a limitar usuários finais individuais da API. É possível que um único usuário do aplicativo do desenvolvedor consuma toda a cota e, em seguida, impeça que outros clientes do desenvolvedor possam usar o aplicativo. Além disso, vários clientes que podem gerar um grande volume de solicitações podem limitar o acesso a usuários ocasionais.

Limitação personalizada baseada em chave

Nota

As rate-limit-by-key políticas e quota-by-key não estão disponíveis quando estão na camada de Consumo do Gerenciamento de API do Azure. A quota-by-key política também não está disponível atualmente nas camadas v2.

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 definir expressões para identificar as chaves usadas para rastrear o uso do tráfego. A forma como isto funciona é mais facilmente ilustrada com um exemplo.

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, com 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 usassem um endereço IP exclusivo, essa poderia ser uma maneira eficaz de limitar o uso pelo usuário. No entanto, é provável que vários usuários estejam compartilhando um único endereço IP público devido ao acesso à Internet através de um dispositivo NAT. Apesar disso, para APIs que permitem acesso não autenticado, a IpAddress opção pode ser a melhor.

Limitação da identidade do utilizador

Se um usuário final for autenticado, uma chave de limitação poderá ser gerada com base em informações que identifiquem exclusivamente esse usuário.

<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 JWT objeto e usar o assunto do token para identificar o usuário e usá-lo como a chave de limitação de taxa. Se a identidade do usuário for armazenada no JWT como uma das outras declarações, esse valor poderá ser usado em seu lugar.

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 combinando ambos os recursos. 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 habilitar a monetização de uma API cobrando com base nos 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.

Limitação orientada pelo cliente

Quando a chave de limitação é definida usando uma expressão de política, é o provedor de API que está escolhendo como a limitação é definida. No entanto, um desenvolvedor pode querer controlar como eles classificam o limite de seus próprios clientes. Isso pode ser habilitado pelo provedor de API introduzindo um cabeçalho personalizado para permitir que o aplicativo cliente do desenvolvedor comunique a chave à API.

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

Isso permite que o aplicativo cliente do desenvolvedor escolha como deseja criar a chave de limitação de taxa. Os desenvolvedores clientes podem criar suas próprias camadas de taxa alocando conjuntos de chaves para os usuários e alternando o uso da chave.

Resumo

A Gestão de API do Azure fornece limitação de taxa e quota para proteger e adicionar valor ao seu serviço de API. As novas políticas de limitação com regras de âmbito personalizadas permitem-lhe controlar melhor essas políticas para permitir que os seus clientes criem aplicações ainda melhores. Os exemplos neste artigo demonstram o uso dessas novas políticas limitando a taxa de fabricação de chaves com endereços IP do cliente, identidade do usuário e valores gerados pelo cliente. No entanto, há muitas outras partes da mensagem que podem ser usadas, como agente de usuário, fragmentos de caminho de URL, tamanho da mensagem.

Próximos passos

Por favor, dê-nos o seu feedback como um problema do GitHub para este tópico. Seria ótimo ouvir sobre outros valores-chave potenciais que têm sido uma escolha lógica em seus cenários.