Das Token-Bucket-Konzept
Anfrageraten begrenzen
Das Token-Bucket-Konzept ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Rate Limiting
Rate Limiting begrenzt, wie viele Vorgänge pro Zeiteinheit stattfinden. Es schützt APIs vor Missbrauch, berücksichtigt Kontingente von Drittanbietern und hält Systeme unter Last stabil.
- Verhindert Überlastung
- Setzt faire Nutzung durch
- Berücksichtigt Limits vorgelagerter Systeme
Das Token-Bucket-Modell
Stellen Sie sich einen Eimer vor, der Tokens enthält. Jede Anfrage muss ein Token entnehmen, um fortzufahren. Tokens werden gleichmäßig nachgefüllt. Wenn der Eimer leer ist, wartet die Anfrage oder wird abgelehnt.
Rate und Burst
Zwei Parameter definieren einen Token-Bucket: die Rate (pro Sekunde hinzugefügte Tokens) und der Burst (Kapazität des Buckets). Burst ermöglicht kurze Spitzen oberhalb der konstanten Rate.
Auffüllen im Zeitverlauf
Wenn die Rate fünf Tokens pro Sekunde beträgt, wird etwa alle 200 Millisekunden ein Token hinzugefügt. Der Bucket enthält nie mehr Tokens als seine Burst-Kapazität, sodass sich ungenutzte Kapazität nicht unbegrenzt ansammelt.
Bursts zulassen
Ein Burst von 10 bedeutet, dass bis zu 10 Anfragen sofort ausgeführt werden können, wenn der Bucket voll ist. Danach werden Anfragen mit der konstanten Rate ausgeführt. So werden Reaktionsfähigkeit und Kontrolle miteinander in Einklang gebracht.
Eine einfache zeitbasierte Prüfung
Sie können Rate Limiting mit einem Ticker annähern, der in festen Abständen eine Erlaubnis freigibt. Jede Anfrage wartet auf den nächsten Tick.
ticker := time.NewTicker(200 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("request", i)
}Token-Bucket oder Leaky-Bucket
Ein Leaky-Bucket leert sich mit konstanter Rate und glättet die Ausgabe vollständig, sodass keine Bursts möglich sind. Ein Token-Bucket erlaubt Bursts bis zur Kapazitätsgrenze. Für API-Limits wird der Token-Bucket häufiger verwendet.
Eine minimale Bucket-Simulation
Dieses ausführbare Beispiel simuliert einen Token-Bucket mit einer Kapazität von 3, der alle 100 ms nachgefüllt wird, und zeigt, welche Anfragen zugelassen werden.
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 oder Reserve
Limiter bieten normalerweise drei Verhaltensweisen: Allow gibt sofort true oder false zurück, Wait blockiert, bis ein Token verfügbar ist, und Reserve teilt Ihnen mit, wie lange gewartet werden muss. Wählen Sie je nachdem, ob Sie blockieren können.
Wo die Limits gelten
Rate Limits können pro Client, pro Endpunkt oder global gelten. Eine Map von Limitern, die nach der Client-IP indiziert ist, setzt Kontingente pro Client durch, während ein einzelner gemeinsam genutzter Limiter den Gesamtdurchsatz begrenzt.
Parameter auswählen
Passen Sie Ihre Rate an das Kontingent des nachgelagerten Systems an. Wenn eine API 600 Anfragen pro Minute erlaubt, setzen Sie die Rate auf 10 pro Sekunde. Setzen Sie Burst so, dass erwartete Spitzen abgefangen werden, ohne den Durchschnitt zu überschreiten.
Kurztest
Testen Sie Ihr Verständnis des Token-Buckets.
Zusammenfassung
Sie haben das Token-Bucket-Konzept gelernt:
- Pro Anfrage werden Tokens verbraucht und mit einer bestimmten Rate nachgefüllt
- Burst ist die Bucket-Kapazität für Spitzen
- Der Token-Bucket erlaubt Bursts, der Leaky-Bucket nicht
- Allow, Wait und Reserve sind die gängigen APIs
Häufig gestellte Fragen
Ist die Lektion „Das Token-Bucket-Konzept“ kostenlos?
Ja — der vollständige Text von „Das Token-Bucket-Konzept“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Das Token-Bucket-Konzept“?
Anfrageraten begrenzen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Das Token-Bucket-Konzept“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Das Token-Bucket-Konzept
- golang.org/x/time/rate
- Goroutines drosseln
- Backoff und Wiederholung