Sobes.tech
Junior — Middle

Hoe wordt het mechanisme voor het beperken van het aantal verzoeken per tijdseenheid in het systeem geïmplementeerd?

sobes.tech AI

Antwoord van AI

Het mechanisme voor het beperken van het aantal verzoeken per tijdseenheid (rate limiting) in Go wordt vaak geïmplementeerd met behulp van tokens of tellers met een tijdsvenster.

Voorbeeld met behulp van het pakket golang.org/x/time/rate:

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

var limiter = rate.NewLimiter(1, 5) // 1 verzoek per seconde met een maximum van 5 tokens

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

Hier creëert rate.NewLimiter een limiter die 1 verzoek per seconde toestaat, maar tot 5 tokens kan accumuleren, waardoor korte pieken in verzoeken mogelijk zijn. Als er te veel verzoeken zijn, worden ze geweigerd met fout 429.

Andere benaderingen omvatten vaste vensters, glijdende vensters of het gebruik van Redis voor gedistribueerde rate limiting.