Junior — Middle
Como é que o mecanismo de limitação do número de pedidos por unidade de tempo é implementado no sistema?
sobes.tech IA
Resposta da IA
O mecanismo de limitação de quantidade de pedidos por unidade de tempo (limitação de taxa) em Go é frequentemente implementado usando tokens ou contadores com janela de tempo.
Exemplo usando o pacote golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 pedido por segundo com um máximo de 5 tokens
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// processamento do pedido
}
Aqui, rate.NewLimiter cria um limitador que permite 1 pedido por segundo, mas pode acumular até 5 tokens, permitindo picos curtos de pedidos. Se houver pedidos demais, eles são rejeitados com erro 429.
Outras abordagens incluem janela fixa, janela deslizante ou uso de Redis para limitação distribuída.