Strategie voor de sliding-window-counter
Leer meer over de sliding-window-counter, een geheugenefficiëntere aanpak die de logmethode benadert voor praktisch gebruik.
Strategie voor de sliding-window-counter is een gratis Patronen voor API-snelheidsbeperking en schaalbaarheid-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Patronen voor API-snelheidsbeperking en schaalbaarheid. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Patronen voor API-snelheidsbeperking en schaalbaarheid bevat in totaal 4 lessen.
Introductie tot Sliding Window Counter
Welkom bij onze les over het Sliding Window Counter-algoritme (SWC)!
Dit algoritme is een slimme manier om snelheidsbeperking te implementeren. Het probeert meer nauwkeurigheid te bieden dan de eenvoudige Fixed Window Counter en tegelijk geheugenefficiënter te zijn dan het nauwkeurige Sliding Window Log.
De tekortkoming van Fixed Window
Je weet nog dat de Fixed Window Counter last kan hebben van een probleem met 'pieken'. Als een gebruiker precies aan het einde van het ene venster verzoeken doet en vervolgens opnieuw aan het begin van het volgende venster, kan die gebruiker in korte tijd effectief twee keer zoveel toegestane verzoeken doen.
De Sliding Window Counter helpt dit probleem te beperken.
Het kernidee: vensters combineren
In plaats van alleen naar het huidige vaste venster te kijken, kijkt SWC naar twee vaste vensters:
- het huidige venster;
- het vorige venster.
Vervolgens combineert het de aantallen met een gewogen gemiddelde om de werkelijke verzoeksfrequentie over een 'schuivende' periode te schatten.
Hoe het 'schuiven' werkt
Het 'schuivende' effect ontstaat door het aantal verzoeken in het vorige venster een gewicht te geven. We berekenen een overlappercentage op basis van hoe ver we in het huidige venster zijn.
Als de venstergrootte bijvoorbeeld 60 seconden is en we 30 seconden in het huidige venster zijn, is 50% van het vorige venster nog steeds 'relevant' voor onze huidige schuivende weergave.
Componenten voor de berekening
Om de Sliding Window Counter toe te passen, moet je enkele gegevens bijhouden:
- Het totale aantal aanvragen voor het vorige vaste venster.
- Het totale aantal aanvragen voor het huidige vaste venster.
- De huidige tijdstempel (om te bepalen hoever we in het huidige venster zijn).
- De gedefinieerde venstergrootte (bijvoorbeeld 60 seconden, 1 minuut).
SWC in actie: scenario
We gebruiken een voorbeeld:
- Snelheidslimiet: 10 aanvragen per minuut.
- Huidige tijd: 30 seconden na het begin van de huidige minuut.
- Aantal in de vorige minuut: 8 aanvragen.
- Aantal in de huidige minuut: tot nu toe 3 aanvragen.
Hoeveel aanvragen hebben we in ons schuivende venster ‘gebruikt’?
Berekening stap voor stap
Zo berekenen we het geschatte aantal:
- Percentage overlap: We zijn 30 seconden in een venster van 60 seconden, dus 30/60 = 0,5 (oftewel 50%).
- Gewogen aantal uit het vorige venster: Het aantal uit het vorige venster (8) wordt gewogen met
(1 - overlap percentage). Dus8 * (1 - 0.5) = 8 * 0.5 = 4. - Geschat totaal: Tel het gewogen aantal uit het vorige venster op bij het huidige aantal:
4 (weighted prev) + 3 (current) = 7.
Er worden dus 7 aanvragen geschat, waardoor er nog 3 aanvragen over zijn.
SWC-logica implementeren
Dit eenvoudige Java-codefragment laat zien hoe je het geschatte aantal aanvragen berekent op basis van de huidige status van twee vensters.
Probeer het uit te voeren om de berekening in actie te zien!
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.");
}
}
}Belangrijkste voordelen van SWC
Sliding Window Counter biedt verschillende voordelen:
- Betere nauwkeurigheid: Het geeft een betere benadering van de werkelijke snelheid dan Fixed Window, vooral rond de grenzen van een venster.
- Efficiënt geheugengebruik: In tegenstelling tot Sliding Window Log hoeft het niet de tijdstempel van elke aanvraag op te slaan, waardoor het minder geheugen vereist.
- Betere verwerking van pieken: Het verkleint de kans op buitensporige pieken ten opzichte van het Fixed Window-algoritme.
SWC: een benadering, niet perfect
Hoewel Sliding Window Counter krachtig is, blijft het een benadering. Het is niet volledig nauwkeurig zoals Sliding Window Log.
Bij de grenzen van een venster kunnen nog steeds kleine overschrijdingen worden toegestaan, al zijn die aanzienlijk kleiner dan bij een puur Fixed Window. Voor vereisten met een hoge nauwkeurigheid kan Sliding Window Log nog steeds de voorkeur hebben, als het geheugen dat toelaat.
Korte controle over SWC
We testen je begrip van de berekening met Sliding Window Counter!
Samenvatting en volgende stap
Goed gedaan! Je hebt het Sliding Window Counter-algoritme geleerd.
- Het combineert aantallen uit twee vaste vensters om een schuivend venster te benaderen.
- Het is nauwkeuriger dan Fixed Window en gebruikt minder geheugen dan Sliding Window Log.
- Het berekent een geschat aantal met behulp van een overlappercentage.
Vervolgens vergelijken we alle algoritmen die je hebt geleerd, zodat je hun afwegingen begrijpt.
Leer Patronen voor API-snelheidsbeperking en schaalbaarheid met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Strategie voor de sliding-window-counter” gratis?
Ja — de volledige tekst van “Strategie voor de sliding-window-counter” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Patronen voor API-snelheidsbeperking en schaalbaarheid wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Patronen voor API-snelheidsbeperking en schaalbaarheid bevat in totaal 4 lessen.
Wat leer ik in “Strategie voor de sliding-window-counter”?
Leer meer over de sliding-window-counter, een geheugenefficiëntere aanpak die de logmethode benadert voor praktisch gebruik. Je oefent met Patronen voor API-snelheidsbeperking en schaalbaarheid door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Patronen voor API-snelheidsbeperking en schaalbaarheid te beginnen?
Ervaring vooraf is niet nodig. Patronen voor API-snelheidsbeperking en schaalbaarheid op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Strategie voor de sliding-window-counter”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Patronen voor API-snelheidsbeperking en schaalbaarheid?
Ja. Elke les over Patronen voor API-snelheidsbeperking en schaalbaarheid bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Implementatie van het sliding-window-logalgoritme
- Strategie voor de sliding-window-counter
- Vergelijking van algoritmen en afwegingen
- Sliding window met sorted sets in Redis