スライディングウィンドウカウンター戦略
ログ方式を近似しながらメモリ効率を高めた、実用的なスライディングウィンドウカウンターについて学びます。
「スライディングウィンドウカウンター戦略」はCoddyKit上の無料API Rate Limiting & Scalability Patternsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAPI Rate Limiting & Scalability Patterns学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 API Rate Limiting & Scalability Patternsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Intro to Sliding Window Counter
Welcome to our lesson on the Sliding Window Counter (SWC) algorithm!
This algorithm is a clever way to implement rate limiting. It aims to offer better accuracy than the simple Fixed Window Counter, while being more memory-efficient than the precise Sliding Window Log.
Fixed Window's Flaw
Recall that the Fixed Window Counter can suffer from a 'burst' problem. If a user makes requests right at the end of one window and then again right at the start of the next, they can effectively double their allowed requests in a short period.
The Sliding Window Counter helps to mitigate this issue.
The Core Idea: Blending Windows
Instead of just looking at the current fixed window, SWC looks at two fixed windows:
- The current window.
- The previous window.
It then combines their counts using a weighted average to estimate the true request rate over a 'sliding' period.
How the 'Slide' Happens
The 'sliding' effect comes from how we weight the previous window's count. We calculate an overlap percentage based on how far we are into the current window.
For example, if our window size is 60 seconds and we are 30 seconds into the current window, 50% of the previous window is still 'relevant' to our current sliding view.
Components for Calculation
To apply the Sliding Window Counter, you need to track a few pieces of information:
- The total request count for the previous fixed window.
- The total request count for the current fixed window.
- The current timestamp (to determine how far into the current window we are).
- The defined window size (e.g., 60 seconds, 1 minute).
SWC in Action: Scenario
Let's use an example:
- Rate Limit: 10 requests per minute.
- Current Time: 30 seconds into the current minute.
- Previous Minute's Count: 8 requests.
- Current Minute's Count: 3 requests so far.
How many requests have we 'used' in our sliding window?
Step-by-Step Calculation
Here's how we calculate the estimated count:
- Overlap Percentage: We are 30 seconds into a 60-second window, so 30/60 = 0.5 (or 50%).
- Weighted Previous Count: The previous window's count (8) is weighted by
(1 - overlap percentage). So,8 * (1 - 0.5) = 8 * 0.5 = 4. - Estimated Total: Add the weighted previous count to the current count:
4 (weighted prev) + 3 (current) = 7.
So, 7 requests are estimated, leaving 3 requests remaining.
Implementing SWC Logic
This simple Java code snippet demonstrates how to calculate the estimated request count based on the current state of two windows.
Try running it to see the calculation in action!
public class RateLimitCalculator {
public static double calculateEstimatedRequests(
int previousWindowCount,
int currentWindowCount,
long timeElapsedInCurrentWindowMillis,
long windowSizeMillis) {
double overlapPercentage = (double) timeElapsedInCurrentWindowMillis / windowSizeMillis;
// The core Sliding Window Counter calculation
// It weights the previous window's count based on the *overlap*
// and adds it to the current window's count.
double estimatedCount = previousWindowCount * (1 - overlapPercentage) + currentWindowCount;
return estimatedCount;
}
public static void main(String[] args) {
int maxRequestsPerMinute = 10;
long windowSizeMillis = 60 * 1000; // 1 minute
// Scenario: 30 seconds into the current minute
long timeElapsed = 30 * 1000;
// Previous minute had 8 requests
int prevCount = 8;
// Current minute has 3 requests so far
int currentCount = 3;
double estimated = calculateEstimatedRequests(
prevCount,
currentCount,
timeElapsed,
windowSizeMillis
);
System.out.println("Prev count: " + prevCount);
System.out.println("Current count: " + currentCount);
System.out.println("Elapsed in window: " + (timeElapsed / 1000) + "s");
System.out.println("Window size: " + (windowSizeMillis / 1000) + "s");
System.out.println("\nEstimated requests: " + String.format("%.2f", estimated));
if (estimated < maxRequestsPerMinute) {
System.out.println("Request would likely be allowed.");
} else {
System.out.println("Request would likely be denied.");
}
}
}SWC's Key Benefits
The Sliding Window Counter offers several advantages:
- Improved Accuracy: It provides a better approximation of the true rate than Fixed Window, especially around window boundaries.
- Memory Efficiency: Unlike Sliding Window Log, it doesn't need to store every request timestamp, making it less demanding on memory.
- Better Burst Handling: It reduces the chance of allowing excessive bursts compared to the Fixed Window algorithm.
SWC: Approximation, Not Perfect
While powerful, the Sliding Window Counter is still an approximation. It's not perfectly accurate like the Sliding Window Log.
It can still allow slight overages at window boundaries, though significantly less than a purely Fixed Window approach. For high-precision requirements, the Sliding Window Log might still be preferred, if memory allows.
Quick Check on SWC
Let's test your understanding of the Sliding Window Counter calculation!
Recap & What's Next
Great job! You've learned about the Sliding Window Counter algorithm.
- It combines counts from two fixed windows to approximate a sliding window.
- It's more accurate than Fixed Window and more memory-efficient than Sliding Window Log.
- It calculates an estimated count using an overlap percentage.
Next, we'll compare all the algorithms you've learned to understand their trade-offs.
AI チューターと学ぶ API Rate Limiting & Scalability Patterns — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「スライディングウィンドウカウンター戦略」レッスンは無料ですか?
はい。「スライディングウィンドウカウンター戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、API Rate Limiting & Scalability Patternsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 API Rate Limiting & Scalability Patternsコースには全4レッスンが含まれています。
「スライディングウィンドウカウンター戦略」で何を学びますか?
ログ方式を近似しながらメモリ効率を高めた、実用的なスライディングウィンドウカウンターについて学びます。 ブラウザで直接実行するハンズオンコードでAPI Rate Limiting & Scalability Patternsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
API Rate Limiting & Scalability Patternsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAPI Rate Limiting & Scalability Patternsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「スライディングウィンドウカウンター戦略」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAPI Rate Limiting & Scalability Patternsレッスンでコードを書いて実行できますか?
はい。すべてのAPI Rate Limiting & Scalability Patternsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- スライディングウィンドウログの実装
- スライディングウィンドウカウンター戦略
- アルゴリズムの比較とトレードオフ
- Redisのソート済みセットによるスライディングウィンドウ