Sobes.tech
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.