0Pricing
API Rate Limiting & Scalability Patterns · 강의

슬라이딩 윈도우 카운터 전략

실용적인 사용을 위해 로그 방식을 근사하면서 메모리를 더 효율적으로 사용하는 슬라이딩 윈도우 카운터를 학습합니다.

슬라이딩 윈도우 카운터 전략은(는) CoddyKit의 무료 API Rate Limiting & Scalability Patterns 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 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:

  1. Overlap Percentage: We are 30 seconds into a 60-second window, so 30/60 = 0.5 (or 50%).
  2. Weighted Previous Count: The previous window's count (8) is weighted by (1 - overlap percentage). So, 8 * (1 - 0.5) = 8 * 0.5 = 4.
  3. 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.

자주 묻는 질문

“슬라이딩 윈도우 카운터 전략” 강의는 무료인가요?

네 — “슬라이딩 윈도우 카운터 전략” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 API Rate Limiting & Scalability Patterns 강의 전체를 잠금 해제할 수 있습니다. API Rate Limiting & Scalability Patterns 강의에는 총 4개의 강의가 포함되어 있습니다.

“슬라이딩 윈도우 카운터 전략”에서 뭘 배우나요?

실용적인 사용을 위해 로그 방식을 근사하면서 메모리를 더 효율적으로 사용하는 슬라이딩 윈도우 카운터를 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 API Rate Limiting & Scalability Patterns을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

API Rate Limiting & Scalability Patterns을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 API Rate Limiting & Scalability Patterns은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“슬라이딩 윈도우 카운터 전략” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 API Rate Limiting & Scalability Patterns 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 API Rate Limiting & Scalability Patterns 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 슬라이딩 윈도우 로그 구현
  2. 슬라이딩 윈도우 카운터 전략
  3. 알고리즘 비교와 절충점
  4. Redis 정렬 집합을 활용한 슬라이딩 윈도
← API Rate Limiting & Scalability Patterns(으)로 돌아가기