Ograniczanie częstotliwości i przepustowości
Dowiedz się, jak rate limiting chroni systemy przed nadużyciami i przeciążeniem, poznając algorytmy token bucket oraz sliding window.
Ograniczanie częstotliwości i przepustowości to bezpłatna lekcja System Design Basics for Backend Developers 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 System Design Basics for Backend Developers, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs System Design Basics for Backend Developers zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Why Rate Limit?
Rate limiting caps how many requests a client can make in a time window. It protects a system from abuse, accidental floods, and runaway clients.
- Stops brute-force and scraping attacks
- Ensures fair sharing among clients
- Protects backends from overload
Rate Limiting vs Throttling
The terms overlap but differ slightly: rate limiting rejects requests over a hard cap, while throttling often slows or queues excess requests rather than rejecting them outright.
Fixed Window Counter
The simplest scheme counts requests in fixed time windows, e.g. 100 per minute. It is easy but has an edge problem: a client can send 100 at the end of one window and 100 at the start of the next — 200 in a few seconds.
limit = 100
window = '12:00:00-12:00:59'
count = 0
# reset count to 0 each new windowSliding Window
A sliding window smooths the edge problem by weighting the previous window or tracking timestamps over a rolling interval. It gives a more accurate, fairer limit at the cost of more bookkeeping.
Token Bucket
The token bucket is the most popular algorithm. Tokens refill at a steady rate up to a capacity. Each request consumes a token; if the bucket is empty, the request is rejected. This allows short bursts while bounding the average rate.
import time
class Bucket:
def __init__(self, cap, rate):
self.cap = cap
self.rate = rate
self.tokens = cap
self.last = time.time()
def allow(self):
now = time.time()
self.tokens = min(self.cap, self.tokens + (now - self.last) * self.rate)
self.last = now
if self.tokens >= 1:
self.tokens -= 1
return True
return False
b = Bucket(5, 1)
print([b.allow() for _ in range(7)])Leaky Bucket
The leaky bucket processes requests at a fixed rate, queuing bursts and 'leaking' them out steadily. It smooths traffic into a constant outflow — good when the downstream needs a steady, predictable load.
Choosing the Limit Key
Decide what to limit on:
- Per API key or user — fair per-account limits
- Per IP — defends against anonymous abuse
- Per endpoint — protects expensive operations
Often you combine several keys.
Communicating Limits
Tell clients their status with standard headers and the right status code, so well-behaved clients can back off.
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1735689600Distributed Rate Limiting
With many app servers, an in-memory counter per server is inconsistent. Use a shared store like Redis with atomic increments (or Lua scripts) so the limit is enforced globally across the fleet.
INCR rl:user:42
EXPIRE rl:user:42 60
# reject when value > limitRate Limiting and DDoS
Rate limiting complements DDoS protection. Application-layer limits stop a single abusive client, while edge and network defenses absorb large volumetric floods before they reach your servers. Defense in depth uses both.
Designing Good Limits
Set limits from real usage data, allow reasonable bursts, expose clear headers, and return 429 with Retry-After. Consider tiered limits — higher caps for paid plans, stricter ones for unauthenticated traffic.
Quick Check
Test your understanding of rate limiting.
Recap
You learned to protect systems with rate limiting:
- Fixed window, sliding window, token bucket, and leaky bucket
- Choose limit keys: per user, per IP, per endpoint
- Return 429 with Retry-After and rate-limit headers
- Use a shared store like Redis for distributed enforcement
Ucz się System Design Basics for Backend Developers dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 12
- Lekcje
- 48
Często zadawane pytania
Czy lekcja „Ograniczanie częstotliwości i przepustowości” jest bezpłatna?
Tak — pełny tekst „Ograniczanie częstotliwości i 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 System Design Basics for Backend Developers, przejdź na CoddyKit PRO. Kurs System Design Basics for Backend Developers zawiera 4 lekcji w sumie.
Co nauczysz się w „Ograniczanie częstotliwości i przepustowości”?
Dowiedz się, jak rate limiting chroni systemy przed nadużyciami i przeciążeniem, poznając algorytmy token bucket oraz sliding window. Ćwiczysz System Design Basics for Backend Developers 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ąć System Design Basics for Backend Developers?
Nie wymagamy żadnego doświadczenia. System Design Basics for Backend Developers 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 „Ograniczanie częstotliwości i 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 System Design Basics for Backend Developers?
Tak. Każda lekcja System Design Basics for Backend Developers 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
- Uwierzytelnianie i autoryzacja
- Szyfrowanie danych i prywatność
- Ochrona przed DDoS i zapory sieciowe
- Ograniczanie częstotliwości i przepustowości