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-ისთვის.