Sobes.tech
Junior — Middle

Cum se implementează mecanismul de limitare a numărului de solicitări într-o unitate de timp în sistem?

sobes.tech AI

Răspuns de la AI

Mecanismul de limitare a numărului de solicitări pe unitate de timp (rate limiting) în Go este adesea implementat folosind token-uri sau contoare cu fereastră de timp.

Exemplu folosind pachetul golang.org/x/time/rate:

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

var limiter = rate.NewLimiter(1, 5) // 1 solicitare pe secundă cu un maximum de 5 token-uri

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

Aici, rate.NewLimiter creează un limitator care permite 1 solicitare pe secundă, dar poate acumula până la 5 token-uri, permițând vârfuri scurte de solicitări. Dacă sunt prea multe solicitări, acestea sunt respinse cu eroarea 429.

Alte abordări includ fereastra fixă, fereastra glisantă sau utilizarea Redis pentru limitare distribuită.