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
- Concept du seau de jetons
- golang.org/x/time/rate
- Limitation des goroutines
- Temporisation progressive et nouvelle tentative