Sobes.tech
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-а за расподељено ограничење брзине.