Junior — Middle
Ako je v systéme implementovaný mechanizmus obmedzenia počtu požiadaviek za jednotku času?
sobes.tech AI
Odpoveď od AI
Mechanizmus obmedzovania počtu požiadaviek za jednotku času (rate limiting) v Go sa často implementuje pomocou tokenov alebo počítadiel s časovým oknom.
Príklad s použitím balíka golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 požiadavka za sekundu s maximálne 5 tokenmi
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// spracovanie požiadavky
}
Tu rate.NewLimiter vytvára limitér, ktorý povoľuje 1 požiadavku za sekundu, ale môže akumulovať až 5 tokenov, čo umožňuje krátkodobé výkyvy v počte požiadaviek. Ak je ich príliš veľa, sú odmietnuté s chybou 429.
Iné prístupy zahŕňajú pevné okno, posuvné okno alebo použitie Redis pre distribuované rate limiting.