Sliding Window Log -toteutus
Ymmärrä Sliding Window Log -algoritmi, sen tarkkuus ja yksittäisten pyyntöjen aikaleimojen seuraamiseen liittyvät tallennustarpeet.
Sliding Window Log -toteutus on ilmainen API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-kurssilla on yhteensä 4 oppituntia.
Johdatus Sliding Window Log -algoritmiin
Tervetuloa tutustumaan Sliding Window Log -algoritmiin! Tämä menetelmä tarjoaa erittäin tarkan tavan API-palvelujen nopeusrajoitusten valvontaan.
Yksinkertaisemmista menetelmistä poiketen se säilyttää yksityiskohtaisen tiedon jokaisesta pyynnöstä, mikä mahdollistaa liikenteen erittäin tarkan hallinnan.
Aikaleimalokin perusidea
Sliding Window Login perusideana on tallentaa jokaisen asiakkaan tekemän pyynnön tarkka aikaleima.
- Kuvitelkaa lista tai taulukko.
- Aina kun pyyntö tehdään, senhetkinen aika (esimerkiksi millisekunteina) lisätään tähän listaan.
- Tämän lokin avulla toimintaa voidaan seurata tarkasti miltä tahansa ajanjaksolta.
Uusien pyyntöjen kirjaaminen
Kun uusi pyyntö saapuu, algoritmi suorittaa kaksi päävaihetta:
- Se tallentaa nykyisen ajan ja lisää sen pyyntöjen aikaleimojen listaan.
- Sen jälkeen se poistaa vanhat aikaleimat, jotka eivät enää kuulu nykyiseen ”liukuvaan” aikaikkunaan.
Näin loki sisältää vain viimeaikaiset ja aktiiviset pyynnöt.
Liukuvan aikaikkunan tarkistaminen
Sen määrittämiseksi, sallitaanko uusi pyyntö, algoritmi laskee liukuvan aikaikkunan.
- Jos rajoitus on 60 sekuntia ja nykyinen aika on
T, aikaikkuna kattaa pyynnöt ajaltaT - 60 secondsaikaanT. - Se laskee, kuinka monta lokin aikaleimoista kuuluu tähän laskettuun aikaikkunaan.
- Jos määrä alittaa sallitun rajan, pyyntö sallitaan.
Aikaikkunan liikkeen havainnollistaminen
Ajatelkaa aikaikkunaa jatkuvana jaksona, joka ”liukuu” eteenpäin jokaisen uuden pyynnön myötä.
Jos rajoitus on 3 pyyntöä 5 sekunnin aikana:
- Ajalla
t=0aikaikkuna on[-5s, 0s]. - Ajalla
t=2saikaikkuna on[-3s, 2s]. - Ajalla
t=6saikaikkuna on[1s, 6s].
Vain nykyiseen liukuvaan aikaikkunaan kuuluvat aikaleimat lasketaan mukaan.
Limiter-luokan määritys
Luodaan perusrunko Java-luokalle, joka toteuttaa Sliding Window Log -rate limiterin. Käytämme ArrayList-rakennetta pyyntöjen aikaleimojen tallentamiseen.
Kokeilkaa tätä nähdäksenne alustavan rakenteen:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class SlidingWindowLogRateLimiter {
private final List<Long> requestTimestamps;
private final long windowSizeMillis; // e.g., 60_000 for 60 seconds
private final int maxRequests;
public SlidingWindowLogRateLimiter(long windowSize, TimeUnit unit, int maxRequests) {
this.requestTimestamps = new ArrayList<>();
this.windowSizeMillis = unit.toMillis(windowSize);
this.maxRequests = maxRequests;
}
// The allowRequest() method will be added next!
public static void main(String[] args) {
System.out.println("Rate Limiter setup complete!");
}
}allowRequest()-metodin toteuttaminen
Toteutetaan nyt allowRequest()-metodin keskeinen logiikka. Metodi poistaa vanhat aikaleimat ja tarkistaa, voidaanko nykyinen pyyntö sallia.
Suorittakaa koodi nähdäksenne rate limiterin yksinkertaisen testin käytännössä!
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class SlidingWindowLogRateLimiter {
private final List<Long> requestTimestamps;
private final long windowSizeMillis;
private final int maxRequests;
public SlidingWindowLogRateLimiter(long windowSize, TimeUnit unit, int maxRequests) {
this.requestTimestamps = new ArrayList<>();
this.windowSizeMillis = unit.toMillis(windowSize);
this.maxRequests = maxRequests;
}
public synchronized boolean allowRequest() {
long currentTime = System.currentTimeMillis();
long windowStartTime = currentTime - windowSizeMillis;
// Remove timestamps older than the current window
requestTimestamps.removeIf(timestamp -> timestamp <= windowStartTime);
// Check if adding a new request would exceed the limit
if (requestTimestamps.size() < maxRequests) {
requestTimestamps.add(currentTime);
return true;
}
return false;
}
public static void main(String[] args) throws InterruptedException {
// Example: 3 requests allowed per 5 seconds
SlidingWindowLogRateLimiter limiter =
new SlidingWindowLogRateLimiter(5, TimeUnit.SECONDS, 3);
System.out.println("Testing 5s, 3 requests limit:");
for (int i = 0; i < 5; i++) {
boolean allowed = limiter.allowRequest();
System.out.println("Request " + (i + 1) + ": " + (allowed ? "Allowed" : "Blocked"));
if (i == 2) Thread.sleep(1000); // Small delay to simulate real traffic
}
// Wait for the window to pass to allow more requests
System.out.println("Waiting 5 seconds for window reset...");
Thread.sleep(5000);
System.out.println("Request after window reset: " + (limiter.allowRequest() ? "Allowed" : "Blocked"));
}
}Keskeinen etu: suuri tarkkuus
Sliding Window Log -algoritmin suurin vahvuus on sen suuri tarkkuus.
- Koska se tallentaa jokaisen yksittäisen aikaleiman, se pystyy laskemaan tarkasti pyyntöjen määrän missä tahansa dynaamisessa aikaikkunassa.
- Tämä poistaa Fixed Window Counter -menetelmissä esiintyvän ”ryöpsähtelyn” ongelman, jossa äkillinen piikki aikaikkunan reunalla voisi kiertää rajoitukset.
Muistin ja suorituskyvyn haaste
Vaikka Sliding Window Log on tarkka, sillä on merkittäviä haittoja erityisesti suuren liikennemäärän API-palveluissa:
- Muistin käyttö: Miljoonien pyyntöjen jokaisen aikaleiman tallentaminen voi kuluttaa paljon muistia.
- Suorituskyky: Uusien aikaleimojen lisääminen ja vanhojen poistaminen (etenkin suurista listoista) voi hidastua ja heikentää suorituskykyä.
Siksi se sopii erittäin suuren läpimenon järjestelmiin huonommin, ellei sitä optimoida.
Testaa ymmärryksesi
Tarkastellaan Sliding Window Log -algoritmia. Mitkä seuraavista väitteistä pitävät paikkansa sen ominaisuuksista?
Kertaus: Sliding Window Log
Tässä oppitunnissa tutustuimme Sliding Window Log -algoritmiin:
- Se seuraa jokaista pyyntöä sen tarkan aikaleiman avulla.
- Se tarjoaa suuren tarkkuuden ja välttää kiinteiden aikaikkunoiden ”ryöpsähdysongelman”.
- Sen keskeisiä haittoja ovat suuri muistin käyttö ja erittäin suurten pyyntölokien mahdolliset suorituskyvyn pullonkaulat.
Seuraavaksi tarkastelemme Sliding Window Counter -algoritmia, jolla näitä haittoja pyritään vähentämään!
Opi API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Sliding Window Log -toteutus” ilmainen?
Kyllä – oppitunnin ”Sliding Window Log -toteutus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-kurssin, päivitä CoddyKit PROhon. API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Sliding Window Log -toteutus”?
Ymmärrä Sliding Window Log -algoritmi, sen tarkkuus ja yksittäisten pyyntöjen aikaleimojen seuraamiseen liittyvät tallennustarpeet. Harjoittelet API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Sliding Window Log -toteutus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-oppitunnilla?
Kyllä. Jokainen API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Sliding Window Log -toteutus
- Sliding Window Counter -strategia
- Algoritmien vertailu ja kompromissit
- Sliding window Redisin sorted set -rakenteilla