Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams) · Oppitunti

Hajautettu nopeudenrajoitus

Koordinoikaa pyyntörajoja useiden sovellusinstanssien välillä Redis-laskurien ja atomisten Lua-komentosarjojen avulla käyttämällä kiinteän ikkunan, liukuvan ikkunan ja token bucket -algoritmeja.

Oppitunti 4/413 vaihetta

Hajautettu nopeudenrajoitus on ilmainen Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-kurssilla on yhteensä 4 oppituntia.

Paikalliset rajat eivät skaalaudu

Muistissa toimiva nopeusrajoitin laskee pyynnöt vain yhdellä palvelimella. Kun kuormantasaajan takana on useita sovellusinstansseja, tarvitset käytön jaetun näkymän. Redis on keskitetty ja atominen, joten se on luonteva koordinointipiste.

Kiinteän ikkunan laskuri

Yksinkertaisin algoritmi käyttää laskuria jokaista aikaikkunaa kohden. Kasvata avaimen arvoa komennolla INCR ja aseta TTL ikkunan pituiseksi ensimmäisen kasvatuksen yhteydessä. Hylkää pyyntö, kun laskuri ylittää rajan.

INCR rl:user:42:1716900000
EXPIRE rl:user:42:1716900000 60

Kilpailutilanne

Kun INCR- ja EXPIRE-komennot suoritetaan erikseen, asiakas voi kaatua niiden välissä ja avain jäädä ilman TTL-arvoa. Atominen Lua-komentosarja korjaa tämän suorittamalla molemmat yhtenä operaationa.

local c = redis.call('INCR', KEYS[1])
if c == 1 then redis.call('EXPIRE', KEYS[1], ARGV[1]) end
return c

Miksi atomisuus on tärkeää

Useiden instanssien ympäristössä samanaikaiset pyynnöt voisivat muuten lukea ja kirjoittaa laskureita lomittain. Lua-komentosarjat suoritetaan palvelimella atomisesti, joten koko tarkistus ja kasvatus tapahtuu ilman lomittumista.

Kiinteän ikkunan purskeongelma

Kiinteät ikkunat sallivat purskeet rajahetkellä: asiakas voi lähettää kokonaisen ikkunan verran pyyntöjä yhden ikkunan lopussa ja uudelleen seuraavan alussa, jolloin todellinen nopeus kaksinkertaistuu.

Liukuva loki-ikkuna

Pyyntöjen aikaleimoista koostuva järjestetty joukko tarjoaa tarkan liukuvan ikkunan. Poista vanhat merkinnät, laske jäljelle jääneet ja lisää uusi pyyntö – kaikki yhdessä komentosarjassa.

ZREMRANGEBYSCORE rl:user:42 0 (now-window)
ZCARD rl:user:42
ZADD rl:user:42 now now

Poletämpäri

Poletämpäri sallii hallitut purskeet. Poletteja lisätään kiinteällä nopeudella ennalta määritettyyn enimmäismäärään asti, ja jokainen pyyntö kuluttaa yhden poletin. Tallenna poletit ja viimeisimmän täydennyksen aika hajautustaulukkoon ja päivitä ne atomisesti Lualla.

HSET rl:tb:user:42 tokens 10 ts 1716900000

Täydennyslogiikka

Laske jokaisen pyynnön yhteydessä kulunut aika ja lisää elapsed * rate poletteja (rajoittaen määrän ämpärin kokoon). Salli pyyntö, jos vähintään yksi poletti on jäljellä. Lua-komentosarja pitää toiminnan yhdenmukaisena kaikissa instansseissa.

Algoritmin valitseminen

Kiinteä ikkuna: edullisin, mutta sallii purskeet rajahetkillä. Liukuva loki: tarkka, mutta kuluttaa enemmän muistia. Poletämpäri: tasainen nopeus ja hallitut purskeet, erinomainen rajapinnoille.

Hyödyllisten otsakkeiden palauttaminen

Kerro asiakkaille niiden rajoista: palauta jäljellä olevien pyyntöjen määrä ja nollautumisaika, jotta asianmukaisesti toimivat asiakkaat voivat rajoittaa nopeuttaan itse.

# X-RateLimit-Remaining: 7
# X-RateLimit-Reset: 1716900060

Huomio vikasietoisuudesta

Päätä varatoiminta Redis-yhteyden katketessa: salli liikenne vikatilanteessa (fail open) saatavuuden säilyttämiseksi tai estä se (fail closed) suojauksen varmistamiseksi. Oikea valinta riippuu siitä, suojaako rajoitus kustannuksia vai oikeellisuutta.

Pikatarkistus

Testaa, kuinka hyvin ymmärrät hajautetun nopeusrajoituksen.

Yhteenveto

Rakensit Redis-pohjaisen hajautetun nopeusrajoituksen: kiinteän ikkunan laskurit, atomisen Luan TTL-vuotojen ja kilpailutilanteiden estämiseksi, liukuvan ikkunan lokit järjestettyjen joukkojen avulla sekä poletämpärit tasaisten purskeiden hallintaan. Laskureiden keskittäminen tekee rajoista yhdenmukaiset kaikissa sovellusinstansseissa; valitse vikatilanteen sallivan ja estävän varatoiminnan välillä harkiten.

Aloita maksutta

Opi Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams) 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 ”Hajautettu nopeudenrajoitus” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-oppimispolun 3 oppituntia, myös oppitunnin “Hajautettu nopeudenrajoitus”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Hajautettu nopeudenrajoitus”?

Koordinoikaa pyyntörajoja useiden sovellusinstanssien välillä Redis-laskurien ja atomisten Lua-komentosarjojen avulla käyttämällä kiinteän ikkunan, liukuvan ikkunan ja token bucket -algoritmeja. Harjoittelet Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Hajautettu nopeudenrajoitus”-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ä Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-oppitunnilla?

Kyllä. Jokainen Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)-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

  1. Hajautetut lukitukset Redisillä
  2. Johtajan valinnan mallit
  3. Redis koordinointipalveluna
  4. Hajautettu nopeudenrajoitus
← Takaisin: Redis-välimuisti ja viestinvälitys (Pub/Sub, Streams)