Junior — Middle
Comment le mécanisme de limitation du nombre de requêtes par unité de temps est-il mis en œuvre dans le système?
sobes.tech IA
Réponse de l'IA
Le mécanisme de limitation du nombre de requêtes par unité de temps (limitation de débit) en Go est souvent implémenté à l'aide de jetons ou de compteurs avec une fenêtre temporelle.
Exemple utilisant le paquet golang.org/x/time/rate :
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 requête par seconde avec un maximum de 5 jetons
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// traitement de la requête
}
Ici, rate.NewLimiter crée un limiteur qui autorise 1 requête par seconde, mais peut accumuler jusqu'à 5 jetons, permettant une brève explosion de requêtes. Si trop de requêtes sont faites, elles sont rejetées avec une erreur 429.
Autres approches : fenêtre fixe, fenêtre glissante ou utilisation de Redis pour la limitation distribuée.