Junior — Middle
Kako se u sistemu implementira mehanizam ograničenja broja zahteva u jedinici vremena?
sobes.tech АИ
Одговор од АИ
Механизам за ограничење броја захтева у јединици времена (rate limiting) у 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-а за расподељено ограничење брзине.