O que é o rate limit

Uma pequena história

Imagine que você criou um serviço. Outros programas se conectam a ele. Seu custo é baixo e isso é ótimo. De repente, algo explode em seu painel da AWS. A conta de $100 dolares vai para $500 sem a adição de nenhum cliente. Você não entende o que aconteceu. Acessa os logs e percebe que um único usuário (programa que se integra com você) está realizando 100 requisições por segundo. Isso não faz sentido, ele precisaria apenas de uma requisição a cada minuto para se manter atualizado. Para resolver esse problema, você pede para seu time implementar um rate limit.

O usuário então tem permissão de fazer 5 requisições por minuto. Caso passe do limite, ele é penalizado e recebe um status indicando que fez muitas requisições (status 429). Até que a penalidade seja resetada, o usuário estará bloqueado de requisitar recursos do serviço.

Com esse exemplo, demonstrei a necessidade do rate limit em serviços. Estou mostrando dessa forma para você entender que não é algo que existe apenas por existir. Ele tem um proposito de controle. Seja de recurso, seja de modelo de negócio (você pode pagar mais para liberar mais requisições se quiser.)

Já que você quer se conectar a outros serviços, acabará encontrando essa tecnica uma hora ou outra e vai precisar saber o que fazer em relação a ela.

Mas o que é Rate Limit exatamente?

Ele é uma técnica para para limitar o número de requisições que podem ser feitos em uma faixa de tempo. Exemplo

  • Máximo de 10 requisições por segundo

  • Máximo de 500 requisições por minuto

  • Máximo de 1000 requisições por mês

Ao chegar ao limite de execução, receberemos o status 429.

A decisão de APIs usarem ela são diversas:

  • Prevenir carga alta de requisições;

  • Prevenir algum tipo de abuso em relação a API (principalmente públicas)

  • Estratégia de negócio. Podendo enquadrar seu cliente em uma faixa de preço com um máximo de requisições.

Isso pode ser um problema quando tentamos integrar com algum serviço. Queremos nos beneficiar o máximo e não fazer requisições que desperdiçam a cota. Vamos dar uma olhada em possíveis soluções para esse limitador.

Atualizado