Junior — Middle
Жүйеде убакыт бирдигинде суроо-талаптардын санын чектөө механизми кандай ишке ашырылат?
sobes.tech AI
AIден жооп
Go'да убакыт бирлигинде суроолор санын чектөө механизми (rate limiting) көбүнчө токендер же убакыт терезелери менен эсептегичтер аркылуу ишке ашырылат.
golang.org/x/time/rate пакети колдонулуп мисал:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // секундасына 1 суроо, максимум 5 токен
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// суроону иштетүү
}
Бул жерде, rate.NewLimiter 1 суроо секундасына уруксат берген, бирок 5ке чейин токен топтоп, кыска мөөнөттүү суроо чамаларына мүмкүндүк берет. Эгер суроолор көп болсо, алар 429 ката менен четке кагылат.
Башка ыкмалар: так терезе, жылжуу терезе же Redis колдонуу бөлүштүрүлгөн ылдамдык чектөө үчүн.