Junior — Middle
Cum se implementează mecanismul de limitare a numărului de solicitări într-o unitate de timp în sistem?
sobes.tech AI
Răspuns de la AI
Mecanismul de limitare a numărului de solicitări pe unitate de timp (rate limiting) în Go este adesea implementat folosind token-uri sau contoare cu fereastră de timp.
Exemplu folosind pachetul golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 solicitare pe secundă cu un maximum de 5 token-uri
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// procesarea solicitării
}
Aici, rate.NewLimiter creează un limitator care permite 1 solicitare pe secundă, dar poate acumula până la 5 token-uri, permițând vârfuri scurte de solicitări. Dacă sunt prea multe solicitări, acestea sunt respinse cu eroarea 429.
Alte abordări includ fereastra fixă, fereastra glisantă sau utilizarea Redis pentru limitare distribuită.