Junior — Middle
Jak w systemie realizowany jest mechanizm ograniczania liczby zapytań w jednostce czasu?
sobes.tech AI
Odpowiedź od AI
Mechanizm ograniczania liczby żądań w jednostce czasu (rate limiting) w Go jest często implementowany za pomocą tokenów lub liczników z oknem czasowym.
Przykład z użyciem pakietu golang.org/x/time/rate:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // 1 żądanie na sekundę z maksymalnie 5 tokenami
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// obsługa żądania
}
Tutaj, rate.NewLimiter tworzy limitator, który pozwala na 1 żądanie na sekundę, ale może akumulować do 5 tokenów, co pozwala na krótkie skoki w liczbie żądań. Jeśli jest ich zbyt wiele, są odrzucane z błędem 429.
Inne podejścia obejmują stałe okno, okno przesuwne lub użycie Redis do rozproszonego limitowania.