Sobes.tech
Junior — Middle

Ako je v systéme implementovaný mechanizmus obmedzenia počtu požiadaviek za jednotku času?

sobes.tech AI

Odpoveď od AI

Mechanizmus obmedzovania počtu požiadaviek za jednotku času (rate limiting) v Go sa často implementuje pomocou tokenov alebo počítadiel s časovým oknom.

Príklad s použitím balíka golang.org/x/time/rate:

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

var limiter = rate.NewLimiter(1, 5) // 1 požiadavka za sekundu s maximálne 5 tokenmi

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

Tu rate.NewLimiter vytvára limitér, ktorý povoľuje 1 požiadavku za sekundu, ale môže akumulovať až 5 tokenov, čo umožňuje krátkodobé výkyvy v počte požiadaviek. Ak je ich príliš veľa, sú odmietnuté s chybou 429.

Iné prístupy zahŕňajú pevné okno, posuvné okno alebo použitie Redis pre distribuované rate limiting.