0Pricing
Go Academy · Leçon

Concept du seau de jetons

Limiter les taux de requêtes

Concept du seau de jetons est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Pourquoi limiter le débit

La limitation du débit plafonne le nombre d'opérations effectuées par unité de temps. Elle protège les API contre les abus, respecte les quotas des services tiers et maintient la stabilité des systèmes sous charge.

  • Évite la surcharge
  • Garantit une utilisation équitable
  • Respecte les limites en amont

Le modèle du seau de jetons

Imaginez un seau qui contient des jetons. Chaque requête doit prendre un jeton pour continuer. Les jetons sont renouvelés à un rythme régulier. Si le seau est vide, la requête attend ou est rejetée.

Débit et rafale

Deux paramètres définissent un seau de jetons : le débit (nombre de jetons ajoutés par seconde) et la rafale (capacité du seau). La rafale permet de gérer de brèves pointes au-dessus du débit régulier.

Renouvellement au fil du temps

Si le débit est de 5 jetons par seconde, environ un jeton apparaît toutes les 200 millisecondes. Le seau ne contient jamais plus de jetons que sa capacité de rafale : la capacité inutilisée ne s'accumule donc pas indéfiniment.

Autoriser les rafales

Une rafale de 10 signifie que jusqu'à 10 requêtes peuvent être exécutées instantanément si le seau est plein. Ensuite, les requêtes sont espacées selon le débit régulier. Cela équilibre réactivité et contrôle.

Une vérification simple fondée sur le temps

Vous pouvez approximer la limitation du débit avec un temporisateur qui libère une autorisation à intervalles fixes. Chaque requête attend l'impulsion suivante.

ticker := time.NewTicker(200 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
    <-ticker.C
    fmt.Println("request", i)
}

Seau de jetons ou seau percé

Un seau percé se vide à un débit constant et lisse complètement la sortie, ce qui interdit les rafales. Un seau de jetons autorise des rafales jusqu'à sa capacité. Le seau de jetons est plus courant pour les limites d'API.

Une simulation minimale de seau

Cet exemple exécutable simule un seau de jetons d'une capacité de 3, renouvelé toutes les 100 ms, et indique quelles requêtes sont autorisées.

package main

import (
    "fmt"
    "time"
)

func main() {
    tokens := 3
    last := time.Now()
    rate := 100 * time.Millisecond
    for i := 0; i < 6; i++ {
        elapsed := time.Since(last)
        refill := int(elapsed / rate)
        if refill > 0 {
            tokens += refill
            if tokens > 3 {
                tokens = 3
            }
            last = time.Now()
        }
        if tokens > 0 {
            tokens--
            fmt.Println("request", i, "allowed")
        } else {
            fmt.Println("request", i, "rejected")
        }
        time.Sleep(40 * time.Millisecond)
    }
}

Allow, Wait ou Reserve

Les limiteurs proposent généralement trois comportements : Allow renvoie immédiatement vrai ou faux, Wait bloque jusqu'à ce qu'un jeton soit disponible et Reserve indique combien de temps attendre. Choisissez selon que vous pouvez ou non bloquer.

Où résident les limites

Les limites de débit peuvent s'appliquer par client, par point de terminaison ou globalement. Une table de limiteurs indexée par l'adresse IP du client impose des quotas par client, tandis qu'un seul limiteur partagé plafonne le débit total.

Choisir les paramètres

Adaptez votre débit au quota du service en aval. Si une API autorise 600 requêtes par minute, définissez le débit à 10 par seconde. Définissez la rafale pour absorber les pointes prévues sans dépasser la moyenne.

Vérification rapide

Vérifiez votre compréhension du seau de jetons.

Récapitulatif

Vous avez appris le concept du seau de jetons :

  • Les jetons sont consommés à chaque requête et renouvelés selon un débit
  • La rafale correspond à la capacité du seau pour les pointes
  • Le seau de jetons autorise les rafales ; le seau percé, non
  • Allow, Wait et Reserve sont les API courantes

Questions Fréquemment Posées

La leçon « Concept du seau de jetons » est-elle gratuite ?

Oui — le texte complet de « Concept du seau de jetons » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Concept du seau de jetons » ?

Limiter les taux de requêtes Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Concept du seau de jetons » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concept du seau de jetons
  2. golang.org/x/time/rate
  3. Limitation des goroutines
  4. Temporisation progressive et nouvelle tentative
← Retour à Go Academy