O que é limitação de taxa?

As organizações usam a limitação de taxa para garantir o uso justo de seus serviços baseados em API e outros serviços e recursos da Web pelos clientes. Ela regula o número de vezes que um usuário pode solicitar um determinado serviço baseado em API em um determinado período de tempo.

Diagrama de limitação de taxa

Quando milhares de usuários compartilham um serviço, a limitação de taxa ajuda o sistema a estar disponível para todos os seus clientes. A limitação de taxa também protege um sistema contra ataques de negação de serviço (DoS). Em um ataque DoS, um usuário mal-intencionado pode iniciar um grande número de solicitações de serviço em um curto período. Isso leva ao esgotamento dos recursos, impedindo que o sistema fique disponível para usuários legítimos. Em alguns casos, um serviço da Web, API ou outro recurso pode receber várias solicitações devido a um erro no lado do cliente ou do usuário. A limitação de taxa é uma abordagem prática que as organizações usam para evitar esses cenários.

Os limites nas mensagens de redes sociais são um exemplo típico de limitação de taxa que a maioria dos usuários da Internet encontra. Sites de redes sociais como Facebook, LinkedIn ou Instagram geralmente limitam o número de mensagens diretas que os usuários podem enviar em um dia. Por exemplo, se um usuário decidir encaminhar uma mensagem para milhares de contatos, a lógica de limitação de taxa do serviço da rede social entra em ação. Ela pode impedir o usuário de enviar mais mensagens por um determinado período.

Por que as organizações precisam da limitação de taxa?

Na era digital, as organizações fornecem a maioria de seus serviços por meio de APIs. Esses serviços baseados em API permitem que as organizações tenham grande controle sobre seus sistemas. Mas, hospedar essas APIs e o banco de dados de back-end sobrecarrega seus recursos. As organizações devem usar a limitação de taxa para garantir o uso justo de suas APIs e evitar que alguns usuários consumam seus recursos. Quando uma API se torna popular, o número de usuários aumenta rapidamente. Nesses cenários, as organizações precisam garantir que todos os seus serviços estejam disponíveis e não sobrecarregados. A limitação de taxa também ajuda as organizações a proteger, controlar e monetizar seus serviços.

Guia de sucesso de limitação de taxa
O guia de sucesso definitivo para o gerente de produto de API
Aproveite o poder das APIs com um guia de sucesso de 7 partes sobre como as empresas podem criar programas de API para expandir seus negócios digitais!

Quais são os principais tipos de limitação de taxa?

Existem vários tipos principais de modelos de limitação de taxa que uma empresa pode escolher, dependendo de qual deles oferece o melhor ajuste com base na natureza dos serviços da Web que ela oferece, conforme exploraremos em mais detalhes abaixo.

Limitação de taxa no nível do usuário

Nos casos em que um sistema pode identificar um usuário individualmente, é possível restringir o número de solicitações de API que o usuário faz em um determinado período. Por exemplo, se o usuário só puder fazer duas solicitações por segundo, o sistema negará a terceira solicitação do usuário feita no mesmo segundo. A limitação de taxa no nível do usuário garante um uso justo. No entanto, manter as estatísticas de uso de cada usuário pode criar uma sobrecarga para o sistema que, se não for necessária por outros motivos, pode consumir recursos.

Limitação de taxa no nível do servidor

A maioria dos serviços baseados em API são distribuídos de forma natural. Isso significa que quando um usuário envia uma solicitação, ela pode ser atendida por qualquer um dos muitos servidores. Em sistemas distribuídos, a limitação de taxa pode ser usada para compartilhar carga entre servidores. Por exemplo, se um servidor receber uma grande quantidade de solicitações de dez servidores em um sistema distribuído e outros estiverem ociosos, o sistema não será totalmente utilizado. Haverá uma restrição no número de solicitações de serviço que um determinado servidor pode manipular com a limitação de taxa no nível do servidor. Se um servidor receber solicitações acima desse limite definido, elas serão descartadas ou roteadas para outro servidor. A limitação de taxa no nível do servidor garante a disponibilidade do sistema e evita ataques de negação de serviço direcionados a um servidor específico.

Limitação de taxa com base na geografia

A maioria dos serviços baseados em API tem servidores espalhados pelo mundo. Quando um usuário emite uma solicitação de API, um servidor próximo à localização geográfica do usuário a atende. As organizações implementam a limitação de taxa baseada em geografia para restringir o número de solicitações de serviço de uma determinada área geográfica. Isso também pode ser feito com base no tempo. Por exemplo, se o número de solicitações provenientes de um determinado local geográfico for pequeno de 1h às 6h, um servidor da Web poderá ter uma regra de limitação de taxa para esse período específico. Se houver um ataque ao servidor durante essas horas, o número de solicitações aumentará. No caso de um pico, o mecanismo de limitação de taxa acionará um alerta e a organização poderá responder rapidamente a esse ataque.

Quais são os algoritmos usados na limitação de taxa?

Limitação de taxa de janela fixa

A limitação de taxa de janela fixa restringe o número de solicitações de API em um momento específico. Por exemplo, um servidor pode ter um componente de limitação de taxa que implementa um algoritmo de janela fixa que aceita apenas 100 solicitações por minuto. O intervalo de tempo é fixo e começa em um horário específico. Por exemplo, o servidor atenderá apenas 100 solicitações entre 10h00 e 10h01. Às 10h01, o período é redefinido. Os algoritmos de janela fixa podem ser implementados no nível do usuário ou no nível do servidor. Se for implementado no nível do usuário, cada usuário poderá fazer 100 solicitações por minuto. Se for um nível de servidor, todos os usuários podem fazer coletivamente 100 solicitações por minuto.

O diagrama abaixo mostra o fluxo de trabalho do algoritmo de janela fixa com limitação de taxa em nível de usuário. Nesse fluxo de trabalho, um usuário recebe uma chave para identificação exclusiva, e há um contador vinculado a cada usuário exclusivo. Quando o usuário faz uma solicitação dentro de um intervalo de tempo, o contador é incrementado.

Vantagens e desvantagens do algoritmo de janela fixa

O algoritmo de janela fixa é fácil de implementar, pois é baseado em um intervalo de tempo fixo. Como a contagem de solicitações é renovada no início de cada intervalo, o algoritmo não causa inanição das solicitações mais recentes. Uma desvantagem do algoritmo de janela fixa, por outro lado, é que ele leva a uma aceleração das solicitações, especialmente no início do período. Por exemplo, se um servidor permite 1.000 solicitações por segundo, todas essas 1.000 solicitações podem ocorrer simultaneamente, sobrecarregando potencialmente o servidor. Esse problema pode surgir porque não há restrição no intervalo de tempo mínimo entre as duas solicitações.

Limitação de taxa com leaky bucket

Ao contrário do algoritmo de janela fixa, o algoritmo de leaky bucket não depende de períodos de tempo. Em vez disso, tem uma fila de comprimento fixo que não depende do tempo. O servidor web atende a solicitação por ordem de chegada. Cada nova solicitação é adicionada ao final da fila. Se a fila estiver cheia quando uma nova solicitação chegar, o servidor descartará a solicitação.

Vantagens e desvantagens do algoritmo de leaky bucket

Uma grande vantagem do algoritmo de leaky bucket é que, por ser baseado em uma fila, é fácil de implementar. Além disso, apresenta solicitações de API ao servidor a uma taxa constante. Ao contrário do algoritmo de janela fixa, não haverá uma explosão no número de solicitações em um determinado momento. No entanto, como o algoritmo de leaky bucket é baseado em uma fila estática, há uma chance de inanição, o que significa que as solicitações mais recentes podem não ser atendidas. Esse problema não está presente com a janela fixa, pois o intervalo de tempo é atualizado periodicamente para aceitar novas solicitações.

Algoritmo de limitação de taxa com janela deslizante

O algoritmo de janela deslizante é bastante semelhante ao algoritmo de janela fixa, exceto pelo ponto inicial da janela de tempo. Na janela deslizante, a janela de tempo inicia somente quando uma nova solicitação é feita. Por exemplo, se a primeira solicitação for feita às 10h02 e o servidor permitir duas solicitações por minuto, o intervalo de tempo será das 10h02 às 10h03.

O algoritmo de janela deslizante resolve efetivamente os problemas de burst em solicitações enfrentados pelo algoritmo de janela fixa e também aborda o problema de inanição que os algoritmos de leaky bucket enfrentam.

Quais são os principais usos da limitação de taxa?

O objetivo principal da limitação de taxa é garantir o uso justo dos recursos compartilhados. Além disso, a limitação de taxa é uma técnica versátil que as organizações podem usar por uma ampla variedade de razões.

A limitação de taxa oferece segurança extra

A limitação de taxa evita ataques de negação de serviço (DoS). Em um ataque DoS, um usuário mal-intencionado inicia um grande número de solicitações de serviço para derrubar o sistema. Por exemplo, se um promotor de shows e um site de vendas de ingressos receber um milhão de solicitações em um segundo quando um show for colocado à venda, ele sobrecarregará o sistema, e o servidor da Web e o banco de dados poderão ficar indisponíveis. Com a limitação de taxa, o site pode impedir tais tentativas. Um ataque de negação de serviço pode acontecer mesmo que o cliente não tenha nenhuma má intenção. Isso acontece quando há um erro no sistema que emite a solicitação (lado do cliente). A limitação de taxa também evita esses ataques não intencionais.

Controle de acesso

A limitação de taxa não lida apenas com a limitação do número de solicitações, mas também pode ser modificada para limitar o nível de acesso. Por exemplo, se houver um serviço baseado em API para visualizar e modificar os detalhes pessoais de um usuário, o algoritmo de limitação de taxa pode implementar diferentes níveis de acesso. Um conjunto de usuários pode visualizar apenas os detalhes pessoais, enquanto o segundo conjunto pode visualizar e modificar os detalhes.

Medição para APIs

Em modelos de negócios de API, a limitação de taxa pode ser usada para medir o uso. Por exemplo, se um usuário se inscreveu em um plano que permite 1.000 solicitações de API por hora, a lógica de limitação de taxa restringirá qualquer solicitação de API acima do limite. Além disso, o algoritmo de limitação de taxa pode permitir dinamicamente que o usuário compre mais solicitações por segundo.

Garante o desempenho

Um dos principais objetivos da implementação da lógica de limitação de taxa é garantir o desempenho de uma API. Quando o sistema permite requisições ilimitadas, o desempenho do servidor se degrada e torna a API mais lenta. Em casos extremos, o servidor pode falhar ao aceitar qualquer solicitação. Isso pode levar a falhas em cascata em um sistema distribuído, onde a carga do servidor que não funciona é distribuída para os outros servidores e os sobrecarrega gradualmente. A limitação de taxa evita essa condição restringindo as solicitações no nível do usuário ou no nível do servidor.

Garante a disponibilidade

Um dos principais requisitos dos serviços baseados em API é sua disponibilidade 24 horas por dia, 7 dias por semana. A cada segundo, milhares de usuários acessam uma API. Mesmo alguns segundos de interrupção podem resultar em uma grande perda para a organização. Portanto, é do interesse de cada organização lutar por zero tempo de inatividade. A limitação de taxa e outras técnicas, como o compartilhamento de carga, permitem que as organizações restrinjam bursts súbitos em solicitações de API e garantam a disponibilidade do sistema.

Limitação de taxa nos lados do cliente e do servidor

Limitação de taxa do lado do servidor

Restringir as solicitações do usuário no lado do servidor é um método amplamente praticado para limitação de taxa. É do interesse do provedor de serviços restringir solicitações ilimitadas de usuários para garantir desempenho e disponibilidade. Como vimos na seção acima, as organizações usam a limitação de taxa do lado do servidor para diversas finalidades.

Limitação de taxa do lado do cliente

Pode parecer que a limitação de taxa seja apenas do interesse dos provedores de API. Na prática, os usuários ou clientes do serviço também podem se beneficiar da limitação de taxa. Os clientes que aderem às restrições de uso sempre podem ter certeza de que o provedor de serviços atenderá às suas solicitações. Se o usuário não levar em consideração a limitação de taxa, poderá ter que enfrentar alguma rejeição repentina ou inesperada de suas solicitações, o que pode afetar a funcionalidade de suas soluções.

Por exemplo, um aplicativo móvel pode ser construído com base na API de mensagens do Facebook. Quando as pessoas usam este aplicativo, na verdade estão usando mensagens do Facebook em segundo plano. Nesse caso, é o cliente que deve tomar as providências para que o aplicativo siga as normas de limitação de taxa. Se a limitação de taxa for ignorada no lado do cliente, os usuários desse aplicativo móvel poderão enfrentar erros inesperados. É do interesse dos usuários da API impor a limitação de taxa no lado do cliente.

Software de limitação de taxa
Experimente o TIBCO Cloud Integration - Teste Grátis
Deixe o TIBCO Cloud Integration capacitar seus negócios com uma integração mais fácil e rápida baseada em API. É integração - simplificada.

Quais são os desafios na implementação da limitação de taxa?

Sistemas distribuídos

A implementação da lógica de limitação de taxa em um sistema com servidores distribuídos é um desafio. Quando um usuário solicita um serviço baseado em API de um sistema distribuído, o componente de limitação de taxa em cada um dos servidores deve ser sincronizado com os outros. Por exemplo, supondo que um usuário já tenha usado quatro de uma cota de cinco solicitações por minuto e emita mais duas solicitações, essas duas solicitações irão para dois servidores diferentes. Cada um dos servidores obtém a contagem de solicitações do usuário e pensa que o usuário emitiu apenas quatro solicitações. Em seguida, ambos os servidores permitem a solicitação de serviço. Assim, em vez das cinco solicitações originais por minuto, o usuário recebe seis solicitações por minuto. Muitos desses problemas de sincronização e condições de disputa podem ocorrer quando a limitação de taxa é implementada em sistemas distribuídos.

Existem várias soluções para as inconsistências de limitação de taxa em sistemas distribuídos. Servidores que usam bloqueios de software para proteger o contador de solicitações do usuário são uma solução. Nesse método, apenas um servidor acessará o contador, que armazena o número de solicitações feitas em uma janela de tempo. Outra solução simples, mas menos elegante, são as sessões fixas em que um único servidor sempre atende ao usuário. Isso, no entanto, contraria a própria ideia de sistemas distribuídos.

Sobrecarga computacional

Adicionar uma camada de lógica com a finalidade de limitar a taxa aumentará a sobrecarga computacional de um servidor. Se o sistema já estiver sobrecarregado, adicionar a lógica de limitação de taxa diminuirá ainda mais a velocidade do sistema, e os usuários poderão sofrer atrasos.

Em vez de implementar a lógica de limitação de taxa no mesmo servidor, ela pode ser incorporada como um componente externo. Sempre que um usuário solicita uma API, a solicitação é roteada primeiro por meio desse componente externo, que decide permitir ou rejeitar a solicitação.

Falha nos componentes de limitação de taxa

Adicionar uma camada de complexidade para limitação de taxa traz uma nova chance de falha. Mesmo que a API esteja funcionando, um erro no componente de limitação de taxa resultará na rejeição de solicitações.

Uma boa implementação de limitação de taxa deve ser capaz de se recuperar rapidamente de falhas. Isso pode ser na forma de reinicializações forçadas quando ocorrem falhas. Além disso, assim como ocorre com os servidores de backup em serviços baseados em API, pode haver um componente de limitação de taxa duplicado que pode assumir a função se o componente original falhar.