Junior — Middle
Hogyan valósul meg a kéréskorlátozó mechanizmus az időegységre vonatkozóan a rendszerben?
sobes.tech MI
Válasz az MI-től
A kéréskorlátozás mechanizmusa időegységenként (rate limiting) Go-ban gyakran tokenek vagy időablakokkal rendelkező számlálók segítségével valósul meg.
Példa a golang.org/x/time/rate csomag használatával:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 kérés másodpercenként, maximum 5 token
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// kérés feldolgozása
}
Itt a rate.NewLimiter egy olyan limitálót hoz létre, amely engedélyezi 1 kérés másodpercenként, de akár 5 tokent is felhalmozhat, lehetővé téve rövid időszakokra jellemző csúcsokat. Ha túl sok kérés érkezik, azokat 429-es hibával elutasítja.
Más megközelítések: fix ablak, mozgó ablak vagy Redis használata a elosztott rate limitinghez.