What if you could stop overloads and unfair blocks with just a simple time-based counting trick?
Why Fixed window algorithm in Rest API? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you run a busy online store and want to limit how many times a user can place an order in one minute to prevent overload.
Without automation, you try to track each user's requests by hand, counting every order and checking the time manually.
This manual counting is slow and confusing.
You might miss some requests or count them twice.
It's hard to keep track of many users at once, and mistakes can cause your system to crash or unfairly block users.
The Fixed window algorithm automatically counts requests in fixed time blocks, like one-minute windows.
It resets the count every minute, making it easy to check if a user has reached the limit.
This keeps your system safe and fair without extra work.
if user_requests_in_last_minute < limit: allow_request() else: block_request()
window_start = current_time - (current_time % window_size) count = get_request_count(user, window_start) if count < limit: allow_request() else: block_request()
This algorithm lets your system handle many users smoothly by controlling request rates automatically and fairly.
Popular websites use the Fixed window algorithm to stop users from sending too many login attempts in a short time, protecting against hacking.
Manual counting of requests is slow and error-prone.
Fixed window algorithm divides time into blocks and counts requests per block.
This method keeps systems stable and fair under heavy use.
Practice
What is the main idea behind the Fixed window algorithm in rate limiting?
Solution
Step 1: Understand fixed window concept
The fixed window algorithm divides time into fixed intervals (windows) and counts requests in each interval.Step 2: Identify how blocking works
If the number of requests in the current window exceeds the limit, further requests are blocked until the next window.Final Answer:
Count requests in fixed time intervals and block if limit exceeded -> Option AQuick Check:
Fixed window = count + block in fixed intervals [OK]
- Confusing fixed window with sliding window algorithm
- Thinking it allows unlimited requests
- Assuming it blocks all requests immediately
Which of the following is the correct way to check the current window start time in a fixed window algorithm using Python?
import time window_size = 60 # seconds current_time = int(time.time()) window_start = ?
Solution
Step 1: Calculate window start using modulo
The window start is the current time minus the remainder when divided by window size, to align to window boundary.Step 2: Apply formula
Usingcurrent_time - (current_time % window_size)gives the start of the current fixed window.Final Answer:
current_time - (current_time % window_size) -> Option AQuick Check:
Window start = current_time - remainder [OK]
- Using modulo alone without subtraction
- Adding window size instead of subtracting remainder
- Confusing window start with window end
Given the following Python code snippet implementing a fixed window rate limiter, what will be the output?
requests = [1, 1, 1, 1, 1]
limit = 3
window_start = 0
count = 0
for req in requests:
if count < limit:
count += req
print("Allowed")
else:
print("Blocked")Solution
Step 1: Trace request counts
Count starts at 0. For each request (value 1), count increases until it reaches limit 3.Step 2: Determine allowed or blocked
First 3 requests increase count to 3 and print "Allowed". Next requests exceed limit, so print "Blocked".Final Answer:
Allowed Allowed Allowed Blocked Blocked -> Option CQuick Check:
Count ≤ 3 allowed, else blocked [OK]
- Assuming all requests allowed
- Resetting count incorrectly
- Confusing count comparison operator
Identify the bug in this fixed window rate limiter code snippet and select the fix:
limit = 5
window_size = 60
count = 0
window_start = int(time.time())
if int(time.time()) - window_start > window_size:
count = 0
count += 1
if count > limit:
print("Blocked")
else:
print("Allowed")Solution
Step 1: Identify window reset logic
The code resets count when window expires but does not updatewindow_start, so window never moves forward.Step 2: Fix by updating window start time
Inside the if block, updatewindow_start = int(time.time())to start a new window correctly.Final Answer:
Movewindow_startupdate inside the if block to reset window -> Option DQuick Check:
Reset count and window start together [OK]
- Not updating window start time
- Resetting count incorrectly
- Ignoring time difference condition
You want to implement a fixed window rate limiter that allows 10 requests per minute per user. Which approach correctly handles multiple users without mixing counts?
Solution
Step 1: Understand per-user counting
Each user must have a separate count to avoid mixing requests between users.Step 2: Use dictionary keyed by user ID
A dictionary with user IDs as keys and counts as values allows tracking each user's requests independently and resetting counts per window.Final Answer:
Use a dictionary with user IDs as keys and counts as values, reset counts per user each window -> Option BQuick Check:
Separate counts per user = dictionary keyed by user [OK]
- Using a single global count for all users
- Not resetting counts per user
- Ignoring user identification in counting
