Sobes.tech
Junior — Middle

Come viene implementato nel sistema il meccanismo di limitazione del numero di richieste in un'unità di tempo?

sobes.tech AI

Risposta dell'AI

Il meccanismo di limitazione del numero di richieste in un'unità di tempo (rate limiting) in Go viene spesso implementato utilizzando token o contatori con finestra temporale.

Esempio con il pacchetto golang.org/x/time/rate:

import (
    "golang.org/x/time/rate"
    "net/http"
)

var limiter = rate.NewLimiter(1, 5) // 1 richiesta al secondo con un massimo di 5 token

func handler(w http.ResponseWriter, r *http.Request) {
    if !limiter.Allow() {
        http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
        return
    }
    // elaborazione richiesta
}

Qui, rate.NewLimiter crea un limitatore che consente 1 richiesta al secondo, ma può accumulare fino a 5 token, permettendo brevi picchi di richieste. Se ci sono troppe richieste, vengono rifiutate con errore 429.

Altri approcci includono finestra fissa, finestra scorrevole o l'uso di Redis per il rate limiting distribuito.