[Dica rápida] Golang rate limit
Com a crescente variedade de dispositivos e plataformas (como mobile, Smart TVs, websites, entre outros), nossas aplicações estão cada vez mais conectadas e expostas por meio de APIs HTTP.
Foi nesse contexto que em uma das minhas atividades quando estava trabalhando em uma emissora de TV, eu tive o primeiro contato com rate limite.
Para quem ainda não conhece este conceito, o rate limiting é uma técnica essencial para controlar o volume de requisições que uma API aceita em determinado período. Isso evita sobrecargas no sistema e garante que todos os usuários tenham acesso justo aos recursos.
Para que você possa ter um melhor entendimento sobre este assunto, vamos avançar para parte prática.
Caso você tenha interesse em clonar a versão final do código que eu utilizarei neste post, segue o seu link no meu Github: go-ratelimit
Analisando este projeto nós temos:
├── main.go
├── middlewares
│ └── ratelimiter.go
main.go: aqui nós temos a implementação simples de uma API que tem um método Get que deve retornar a ”Hello, World!”
ratelimiter.go: neste arquivo, temos a implementação do rate limit usando a biblioteca golang.org/x/time/rate
. Essa biblioteca nos permite criar um limitador de taxa configurável para controlar a quantidade de requisições que podem ser processadas pela API em um intervalo de tempo específico, prevenindo sobrecarga e garantindo uma distribuição justa dos recursos.
Com o rate.NewLimiter
, definimos duas configurações principais:
- Taxa (Rate): Especifica o número máximo de requisições permitidas por segundo. Por exemplo,
rate.NewLimiter(10, 2)
permite até 10 requisições por segundo. - Burst: Define a quantidade de requisições que podem ser processadas de uma só vez, permitindo uma pequena “explosão” momentânea de requisições. Isso é útil para cenários em que se deseja tolerar pequenos picos de tráfego.
Executando o código nós temos o seguinte resultado:
Note que enviando mais de um request ele retorna o status code429 - Too Many Requests.
Bom, com isso finalizo mais este artigo.
Até a próxima pessoal :)