Sobes.tech
Junior — Middle

Πώς υλοποιείται ο μηχανισμός περιορισμού του αριθμού των αιτημάτων ανά μονάδα χρόνου στο σύστημα;

sobes.tech AI

Απάντηση από AI

Ο μηχανισμός περιορισμού του αριθμού αιτημάτων ανά μονάδα χρόνου (rate limiting) σε Go υλοποιείται συχνά με τη χρήση tokens ή μετρητών με χρονικό παράθυρο.

Παράδειγμα με το πακέτο golang.org/x/time/rate:

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

var limiter = rate.NewLimiter(1, 5) // 1 αίτημα ανά δευτερόλεπτο με μέγιστο 5 tokens

func handler(w http.ResponseWriter, r *http.Request) {
    if !limiter.Allow() {
        http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
        return
    }
    // επεξεργασία αιτήματος
}

Εδώ, το rate.NewLimiter δημιουργεί έναν περιοριστή που επιτρέπει 1 αίτημα ανά δευτερόλεπτο, αλλά μπορεί να συσσωρεύσει έως και 5 tokens, επιτρέποντας σύντομες αιχμές αιτημάτων. Αν υπάρχουν πάρα πολλά αιτήματα, απορρίπτονται με σφάλμα 429.

Άλλες προσεγγίσεις περιλαμβάνουν σταθερό παράθυρο, κινούμενο παράθυρο ή χρήση Redis για κατανεμημένο rate limiting.