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