Wybór właściwego algorytmu ograniczania przepustowości
Porównają Państwo podstawowe algorytmy ograniczania przepustowości — fixed window, sliding window, token bucket i leaky bucket — oraz dowiedzą się, kiedy każdy z nich pasuje do profilu ruchu i celów dotyczących sprawiedliwego dostępu.
Wybór właściwego algorytmu ograniczania przepustowości to bezpłatna lekcja API Rate Limiting & Scalability Patterns na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej API Rate Limiting & Scalability Patterns, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs API Rate Limiting & Scalability Patterns zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Why the Algorithm Matters
A rate limit policy is only as good as the algorithm that enforces it. The same limit of 100 requests/minute behaves very differently depending on how you count.
In this lesson we compare four classic approaches and learn how to pick one based on your fairness, burst, and accuracy needs.
Fixed Window Counter
The simplest approach: count requests in a fixed time window (for example each calendar minute) and reset the counter at the boundary.
- Pros: trivial to implement, low memory
- Cons: allows a burst of
2xthe limit around the window edge
def allow(counter, limit):
if counter['count'] >= limit:
return False
counter['count'] += 1
return TrueThe Boundary Burst Problem
With a fixed window, a client can send limit requests at 00:59 and another limit at 01:00. That is double the intended rate in a one-second span.
Sliding window algorithms exist to smooth out exactly this spike.
Sliding Window Log
Store a timestamp for every request. To decide, drop timestamps older than the window and count what remains.
- Pros: exact, no boundary burst
- Cons: memory grows with request volume
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 TrueSliding Window Counter
A hybrid: keep the current and previous fixed-window counts, then estimate the rate using a weighted overlap.
It approximates the sliding log with far less memory, which is why API gateways and CDNs favor it.
weighted = prev_count * overlap + curr_count
allowed = weighted < limitToken Bucket
A bucket holds tokens up to a capacity. Tokens refill at a steady rate; each request spends one token. Empty bucket means reject.
- Allows controlled bursts up to the bucket capacity
- Smooths the long-term average to the refill rate
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
Requests enter a queue that leaks at a constant rate. If the queue overflows, requests are dropped.
Unlike the token bucket, the leaky bucket enforces a steady output rate — ideal when a downstream service cannot handle spikes.
Token vs. Leaky Bucket
- Token bucket lets traffic burst up to capacity, then throttles — good for user-facing APIs that should feel responsive.
- Leaky bucket forces a smooth, constant flow — good for protecting fragile backends.
Memory and Accuracy Trade-offs
Pick based on constraints:
- Lowest memory: fixed window
- Highest accuracy: sliding window log
- Best balance: sliding window counter
- Burst-friendly: token bucket
Distributed Considerations
Across many servers, each node cannot keep its own counter or you multiply the real limit. Use a shared store like Redis with atomic operations so the count is global.
Token bucket and sliding window counter both map cleanly to Redis primitives.
-- Redis atomic counter with expiry
INCR rate:user:42
EXPIRE rate:user:42 60A Decision Checklist
Ask:
- Do I need to allow short bursts? → token bucket
- Must downstream see a steady rate? → leaky bucket
- Is exactness critical for billing? → sliding window log
- Do I want simple and cheap? → fixed or sliding window counter
Quick Check
Test your understanding of algorithm selection.
Recap
You compared four rate limiting algorithms:
- Fixed window — cheap but allows edge bursts
- Sliding window — accurate, smooths boundaries
- Token bucket — burst-friendly, averages out
- Leaky bucket — constant output rate
Choose based on burst tolerance, accuracy, and memory budget.
Często zadawane pytania
Czy lekcja „Wybór właściwego algorytmu ograniczania przepustowości” jest bezpłatna?
Tak — pełny tekst „Wybór właściwego algorytmu ograniczania przepustowości” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu API Rate Limiting & Scalability Patterns, przejdź na CoddyKit PRO. Kurs API Rate Limiting & Scalability Patterns zawiera 4 lekcji w sumie.
Co nauczysz się w „Wybór właściwego algorytmu ograniczania przepustowości”?
Porównają Państwo podstawowe algorytmy ograniczania przepustowości — fixed window, sliding window, token bucket i leaky bucket — oraz dowiedzą się, kiedy każdy z nich pasuje do profilu ruchu i celów… Ćwiczysz API Rate Limiting & Scalability Patterns z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć API Rate Limiting & Scalability Patterns?
Nie wymagamy żadnego doświadczenia. API Rate Limiting & Scalability Patterns w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wybór właściwego algorytmu ograniczania przepustowości”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji API Rate Limiting & Scalability Patterns?
Tak. Każda lekcja API Rate Limiting & Scalability Patterns zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyjaśnienie różnic między throttlingiem a rate limitingiem
- Zasady obsługi nagłych skoków ruchu i okresów karencji
- Limity po stronie klienta a limity po stronie serwera
- Wybór właściwego algorytmu ograniczania przepustowości