Sobes.tech
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 колдонуу бөлүштүрүлгөн ылдамдык чектөө үчүн.