Sobes.tech
Junior — Middle

Wie wird der Mechanismus zur Begrenzung der Anfragenanzahl pro Zeiteinheit im System umgesetzt?

sobes.tech KI

Antwort von AI

Der Mechanismus zur Begrenzung der Anfragenanzahl pro Zeiteinheit (Rate Limiting) in Go wird häufig mit Token-Bänken oder Zählern mit Zeitfenster implementiert.

Beispiel unter Verwendung des Pakets golang.org/x/time/rate:

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

var limiter = rate.NewLimiter(1, 5) // 1 Anfrage pro Sekunde mit maximal 5 Tokens

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

Hier erstellt rate.NewLimiter einen Limitierer, der 1 Anfrage pro Sekunde erlaubt, aber bis zu 5 Tokens ansammeln kann, was kurzfristige Anstiegsspitzen bei Anfragen ermöglicht. Bei zu vielen Anfragen werden diese mit Fehler 429 abgelehnt.

Weitere Ansätze sind das feste Fenster, das gleitende Fenster oder die Verwendung von Redis für verteiltes Rate Limiting.