Junior — Middle
Kaip įgyvendinamas mechanizmas, ribojantis užklausų skaičių vienetui laiko sistemoje?
sobes.tech AI
Atsakymas iš AI
Rate limiting mechanizmas (greitaveikos ribojimas) Go dažnai įgyvendinamas naudojant žetonus arba skaitiklius su laiko langais.
Pavyzdys naudojant paketą golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 užklausa per sekundę, maksimaliai 5 žetonai
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// užklausos apdorojimas
}
Čia rate.NewLimiter sukuria limitatorių, leidžiantį 1 užklausą per sekundę, bet galintį kaupti iki 5 žetonų, leidžiant trumpalaikius užklausų šuolius. Jei užklausų yra per daug, jos atmestos su klaida 429.
Kiti metodai apima fiksuotą langą, slankų langą arba Redis naudojimą paskirstytam greitaveikos ribojimui.