Junior — Middle
Kuidas rakendatakse süsteemis piirangumehhanismi taotluste arvule ühes ajamõõdus?
sobes.tech AI
Vastus AI-lt
Rate limiting mehhanism (kiiruse piiramine) Go-s on sageli rakendatud tokenite või ajastatud akende abil.
Näide kasutades paketti golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 päring sekundis, maksimaalselt 5 tokenit
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// päringu töötlemine
}
Siin loob rate.NewLimiter piiraja, mis lubab 1 päringu sekundis, kuid võib koguda kuni 5 tokenit, võimaldades lühiajalisi päringute plahvatusi. Kui päringute arv on liiga suur, lükatakse need tagasi veaga 429.
Teised lähenemised hõlmavad fikseeritud akent, libisevat akent või Redis-i kasutamist jaotatud kiiruse piiramiseks.