Go Academy · Les

Het token-bucketconcept

Beperk aanvraagsnelheden

Les 1 van 413 stappen

Het token-bucketconcept is een gratis Go Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.

Waarom snelheidsbeperking

Snelheidsbeperking begrenst hoeveel bewerkingen er per tijdseenheid plaatsvinden. Het beschermt API's tegen misbruik, respecteert quota van derden en houdt systemen stabiel onder belasting.

  • Voorkomt overbelasting
  • Dwingt eerlijk gebruik af
  • Respecteert limieten stroomopwaarts

Het tokenbucketmodel

Stel je een emmer met tokens voor. Elke aanvraag moet een token pakken om door te gaan. Tokens worden met een vaste snelheid aangevuld. Als de emmer leeg is, wacht de aanvraag of wordt die afgewezen.

Snelheid en burst

Twee parameters bepalen een tokenbucket: de snelheid (toegevoegde tokens per seconde) en de burst (capaciteit van de emmer). Met burst zijn korte pieken boven de vaste snelheid mogelijk.

Aanvullen na verloop van tijd

Als de snelheid 5 tokens per seconde is, verschijnt er ongeveer elke 200 milliseconden één token. De emmer bevat nooit meer tokens dan zijn burstcapaciteit, zodat ongebruikte capaciteit zich niet onbeperkt opstapelt.

Pieken toestaan

Een burst van 10 betekent dat er onmiddellijk maximaal 10 aanvragen kunnen worden uitgevoerd als de emmer vol is. Daarna worden aanvragen volgens de vaste snelheid afgehandeld. Zo combineer je snelle reacties met controle.

Een eenvoudige tijdgebaseerde controle

Je kunt snelheidsbeperking benaderen met een ticker die met vaste tussenpozen toestemming vrijgeeft. Elke aanvraag wacht op de volgende tik.

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

Tokenbucket versus leaky bucket

Een leaky bucket loopt met een vaste snelheid leeg en maakt de uitvoer volledig gelijkmatig, waardoor pieken niet zijn toegestaan. Een token bucket staat pieken tot aan de capaciteit toe. Token bucket wordt vaker gebruikt voor API-limieten.

Een minimale emmersimulatie

Dit uitvoerbare voorbeeld simuleert een tokenbucket met capaciteit 3 die elke 100 ms wordt aangevuld en laat zien welke aanvragen worden toegestaan.

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 versus Wait versus Reserve

Limiters bieden meestal drie mogelijkheden: Allow retourneert onmiddellijk true of false, Wait blokkeert totdat er een token beschikbaar is en Reserve vertelt je hoe lang je moet wachten. Kies op basis van de vraag of je kunt blokkeren.

Waar snelheidslimieten gelden

Snelheidslimieten kunnen per klant, per eindpunt of globaal gelden. Een map met limiters op basis van het IP-adres van de klant dwingt quota per klant af, terwijl één gedeelde limiter de totale doorvoer begrenst.

Parameters kiezen

Stem je snelheid af op het quota stroomafwaarts. Als een API 600 aanvragen per minuut toestaat, stel je de snelheid in op 10 per seconde. Stel burst in om verwachte pieken op te vangen zonder het gemiddelde te overschrijden.

Korte toets

Toets je begrip van de tokenbucket.

Samenvatting

Je hebt het tokenbucketconcept geleerd:

  • Per aanvraag worden tokens verbruikt en met een bepaalde snelheid aangevuld
  • Burst is de capaciteit van de emmer voor pieken
  • Een tokenbucket staat pieken toe; een leaky bucket niet
  • Allow, Wait en Reserve zijn de gebruikelijke API's
Gratis beginnen

Leer Go met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “Het token-bucketconcept” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “Het token-bucketconcept”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.

Wat leer ik in “Het token-bucketconcept”?

Beperk aanvraagsnelheden Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Go Academy te beginnen?

Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Het token-bucketconcept”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Go Academy?

Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het token-bucketconcept
  2. golang.org/x/time/rate
  3. Goroutines afremmen
  4. Back-off en opnieuw proberen
← Terug naar Go Academy