Sobes.tech
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.