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-ის გამოყენებას განაწილებული rate limiting-ისთვის.