Velge riktig algoritme for hastighetsbegrensning
Sammenlign de grunnleggende algoritmene for hastighetsbegrensning – fixed window, sliding window, token bucket og leaky bucket – og lær når hver av dem passer til trafikkprofilen og målene for rettferdighet.
Velge riktig algoritme for hastighetsbegrensning er en gratis leksjon i Mønstre for API-ratebegrensning og skalerbarhet på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Mønstre for API-ratebegrensning og skalerbarhet, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Mønstre for API-ratebegrensning og skalerbarhet inneholder totalt 4 leksjoner.
Hvorfor algoritmen er viktig
En policy for hastighetsbegrensning er bare så god som algoritmen som håndhever den. Den samme grensen på 100 requests/minute oppfører seg svært forskjellig avhengig av hvordan De teller.
I denne leksjonen sammenligner vi fire klassiske tilnærminger og lærer hvordan vi velger én basert på behovene for rettferdighet, topper og nøyaktighet.
Teller for fast vindu
Den enkleste tilnærmingen: Tell forespørsler i et fast tidsvindu, for eksempel hvert kalenderminutt, og tilbakestill telleren ved grenseovergangen.
- Fordeler: svært enkel å implementere, lav minnebruk
- Ulemper: tillater en topp på
2xgrensen rundt vindusgrensen
def allow(counter, limit):
if counter['count'] >= limit:
return False
counter['count'] += 1
return TrueProblemet med topper ved grensen
Med et fast vindu kan en klient sende limit forespørsler klokken 00:59 og ytterligere limit klokken 01:00. Det er dobbelt så høy hastighet som tilsiktet i løpet av ett sekund.
Algoritmer med glidende vindu finnes for å jevne ut nettopp denne toppen.
Logg for glidende vindu
Lagre et tidsstempel for hver forespørsel. For å ta en avgjørelse fjerner De tidsstempler som er eldre enn vinduet, og teller det som gjenstår.
- Fordeler: nøyaktig, ingen topper ved grensen
- Ulemper: minnebruken øker med trafikkmengden
def allow(log, now, window, limit):
cutoff = now - window
log[:] = [t for t in log if t > cutoff]
if len(log) >= limit:
return False
log.append(now)
return TrueTeller for glidende vindu
En hybrid: Behold tellingene for det gjeldende og det forrige faste vinduet, og estimer deretter hastigheten ved hjelp av et vektet overlapp.
Den tilnærmer seg loggen for det glidende vinduet med langt mindre minnebruk, og derfor foretrekkes den av API-gatewayer og CDN-er.
weighted = prev_count * overlap + curr_count
allowed = weighted < limitToken bucket
En bøtte inneholder tokens opptil en angitt kapasitet. Tokens fylles på med jevn hastighet, og hver forespørsel bruker ett token. En tom bøtte betyr avvisning.
- Tillater kontrollerte topper opptil bøttekapasiteten
- Jevner ut det langsiktige gjennomsnittet til påfyllingshastigheten
def allow(bucket, now, rate, capacity):
elapsed = now - bucket['ts']
bucket['tokens'] = min(capacity, bucket['tokens'] + elapsed * rate)
bucket['ts'] = now
if bucket['tokens'] < 1:
return False
bucket['tokens'] -= 1
return TrueLeaky bucket
Forespørsler legges i en kø som lekker med konstant hastighet. Hvis køen blir full, forkastes forespørsler.
I motsetning til token bucket håndhever leaky bucket en jevn utdatahastighet – ideelt når en nedstrøms tjeneste ikke tåler topper.
Token bucket kontra leaky bucket
- Token bucket lar trafikken få topper opptil kapasiteten, og begrenser deretter hastigheten – egnet for brukerrettede API-er som skal oppleves responsive.
- Leaky bucket tvinger frem en jevn, konstant flyt – egnet for å beskytte sårbare backend-systemer.
Avveininger mellom minne og nøyaktighet
Velg basert på begrensningene:
- Lavest minnebruk: fast vindu
- Høyest nøyaktighet: logg for glidende vindu
- Beste balanse: teller for glidende vindu
- Egnet for topper: token bucket
Distribuerte hensyn
På tvers av mange servere kan ikke hver node ha sin egen teller, ellers blir den reelle grensen multiplisert. Bruk et delt lagringssystem som Redis med atomiske operasjoner, slik at tellingen blir global.
Både token bucket og telleren for glidende vindu kan enkelt tilpasses Redis-primitiver.
-- Redis atomic counter with expiry
INCR rate:user:42
EXPIRE rate:user:42 60En sjekkliste for valg
Spør:
- Trenger jeg å tillate korte topper? → token bucket
- Må systemet nedstrøms se en jevn hastighet? → leaky bucket
- Er nøyaktighet avgjørende for fakturering? → logg for glidende vindu
- Ønsker jeg noe enkelt og billig? → teller for fast eller glidende vindu
Kjapp sjekk
Test forståelsen Deres av valg av algoritme.
Oppsummering
De sammenlignet fire algoritmer for hastighetsbegrensning:
- Fast vindu – billig, men tillater topper ved grensen
- Glidende vindu – nøyaktig og jevner ut grenseoverganger
- Token bucket – egnet for topper og jevner ut gjennomsnittet
- Leaky bucket – konstant utdatahastighet
Velg basert på hvor store topper De aksepterer, nøyaktighet og tilgjengelig minnebudsjett.
Lær deg Mønstre for API-ratebegrensning og skalerbarhet med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Velge riktig algoritme for hastighetsbegrensning» gratis?
Ja – hele teksten i «Velge riktig algoritme for hastighetsbegrensning» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Mønstre for API-ratebegrensning og skalerbarhet-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Mønstre for API-ratebegrensning og skalerbarhet inneholder totalt 4 leksjoner.
Hva lærer jeg i «Velge riktig algoritme for hastighetsbegrensning»?
Sammenlign de grunnleggende algoritmene for hastighetsbegrensning – fixed window, sliding window, token bucket og leaky bucket – og lær når hver av dem passer til trafikkprofilen og målene for rettfe… Du øver på Mønstre for API-ratebegrensning og skalerbarhet med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Mønstre for API-ratebegrensning og skalerbarhet?
Ingen tidligere erfaring er nødvendig. Mønstre for API-ratebegrensning og skalerbarhet på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Velge riktig algoritme for hastighetsbegrensning»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Mønstre for API-ratebegrensning og skalerbarhet-leksjonen?
Ja. Alle Mønstre for API-ratebegrensning og skalerbarhet-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Throttling kontra hastighetsbegrensning forklart
- Retningslinjer for trafikkøkninger og nådeperioder
- Grenser på klientsiden kontra serversiden
- Velge riktig algoritme for hastighetsbegrensning