Sobes.tech
Junior — Middle

Ինչպե՞ս է համակարգում իրականացվում ժամանակի միավորում հարցումների քանակի սահմանափակման մեխանիզմը։

sobes.tech AI

Պատասխան AI-ից

Go-յում ժամանակ միավորում հարցումների քանակը սահմանափակելու մեխանիզմը հաճախ իրականացվում է տոքենների կամ ժամանակային պատուհաններով հաշվիչների միջոցով:

Օրինակ՝ օգտագործելով 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-ի օգտագործում՝ տարածված արագության սահմանափակման համար։