Junior — Middle
Sistemdə vaxt vahidində sorğu sayını məhdudlaşdırma mexanizmi necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da zaman vahidində sorğuların sayını məhdudlaşdırma mexanizmi (rate limiting) tez-tez tokenlər və ya zaman pəncərələri ilə sayıcılar vasitəsilə həyata keçirilir.
golang.org/x/time/rate paketindən istifadə nümunəsi:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // saniyədə 1 sorğu və maksimum 5 token
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// sorğunun işlənməsi
}
Burada, rate.NewLimiter saniyədə 1 sorğu icazə verən, lakin 5-ə qədər token yığa bilən limitator yaradır, bu da qısa müddətli sorğu artımlarına imkan verir. Əgər çox sayda sorğu olsa, onlar 429 xətası ilə rədd edilir.
Digər yanaşmalar arasında sabit pəncərə, hərəkətli pəncərə və ya Redis istifadə edilərək paylanmış rate limiting daxildir.