Yleinen ja palvelukohtainen nopeusrajoitus
Ymmärrä reunalla sovellettavien yleisten nopeusrajoitusten ja yksittäisille mikropalveluille määritettyjen rajoitusten erot ja yhteisvaikutus.
Yleinen ja palvelukohtainen nopeusrajoitus on ilmainen API-pyyntöjen rajoittaminen ja skaalautuvuuden suunnittelumallit-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Maailmanlaajuiset ja palvelukohtaiset rajat
API-rajapinnat käsittelevät usein monenlaista liikennettä tavallisista käyttäjistä tiettyihin sisäisiin järjestelmiin. Tämän hallitsemiseksi tarvitsemme erilaisia pyyntöjen rajoitusstrategioita.
Tässä tarkastelemme kahta keskeistä lähestymistapaa: maailmanlaajuista pyyntöjen rajoittamista ja palvelukohtaista pyyntöjen rajoittamista. Niiden erojen ymmärtäminen auttaa rakentamaan vankkoja ja oikeudenmukaisia API-rajapintoja.
Yhdyskäytävien maailmanlaajuinen suojaus
Maailmanlaajuinen pyyntöjen rajoittaminen toteutetaan järjestelmän reunalla, ennen kuin pyynnöt saavuttavat yksittäiset palvelut. Sitä voi ajatella klubin sisäänkäynnin ovimiehenä.
- Se suojaa koko infrastruktuuria.
- Se toteutetaan usein API-yhdyskäytävissä, kuormantasaajissa tai reunavälityspalvelimissa.
- Se keskittyy pyyntöjen kokonaismäärään estääkseen järjestelmän ylikuormittumisen tai DDoS-hyökkäykset.
Maailmanlaajuisen rajan määritys
Seuraavassa on yksinkertaistettu esimerkki siitä, miten maailmanlaajuinen pyyntöraja voidaan määrittää Nginxin kaltaisessa API-yhdyskäytävässä. Rajoitus koskee kaikkia päätepisteitä.
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location / {
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://backend_services;
}
}
}Miksi maailmanlaajuiset rajat ovat tärkeitä
Maailmanlaajuisten pyyntörajojen toteuttaminen tarjoaa useita etuja:
- DDoS-suojaus: Estää haitallisen liikenteen ennen kuin se vaikuttaa palveluihin.
- Yleinen vakaus: Varmistaa, ettei äkillinen liikennepiikki kuormita koko järjestelmää liikaa.
- Keskitetty hallinta: Koko API-ympäristön rajojen hallinta ja muuttaminen on helppoa.
- Resurssitehokkuus: Yksittäisten palvelujen tarvitsee tehdä vähemmän perustason suodatusta.
Hienojakoinen palvelukohtainen hallinta
Palvelukohtainen pyyntöjen rajoittaminen tapahtuu tietyn mikropalvelun sisällä. Se muistuttaa klubin eri huoneille määritettyjä omia sääntöjä.
- Se koskee tietyn palvelun yksittäisiä päätepisteitä tai toimintoja.
- Se toteutetaan suoraan palvelun koodissa tai sidecar-välityspalvelimen avulla.
- Se keskittyy tiettyjen palveluresurssien suojaamiseen ja liiketoimintalogiikan toteuttamiseen.
Palvelukohtaisen rajan koodi
Seuraava pieni Java-esimerkki havainnollistaa tietyn päätepisteen yksinkertaista palvelukohtaista pyyntörajoitusta. Esimerkissä käytetään muistinvaraista laskuria havainnollistamistarkoituksessa.
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.time.Instant;
public class Main {
private static final int MAX_REQUESTS_PER_MINUTE = 3;
private static final long WINDOW_MILLIS = 60 * 1000; // 1 minute
private static ConcurrentHashMap<String, Long> lastResetTime =
new ConcurrentHashMap<>();
private static ConcurrentHashMap<String, AtomicInteger> requestCounts =
new ConcurrentHashMap<>();
public static boolean allowRequest(String userId) {
long currentTime = Instant.now().toEpochMilli();
lastResetTime.computeIfAbsent(userId, k -> currentTime);
requestCounts.computeIfAbsent(userId, k -> new AtomicInteger(0));
// Reset if window passed
if (currentTime - lastResetTime.get(userId) > WINDOW_MILLIS) {
lastResetTime.put(userId, currentTime);
requestCounts.get(userId).set(0);
}
if (requestCounts.get(userId).get() < MAX_REQUESTS_PER_MINUTE) {
requestCounts.get(userId).incrementAndGet();
return true;
}
return false;
}
public static void main(String[] args) {
String userA = "user123";
System.out.println("User A requests:");
for (int i = 0; i < 5; i++) {
System.out.println("Request " + (i + 1) + ": " +
(allowRequest(userA) ? "Allowed" : "Denied"));
}
System.out.println("\nUser B requests:");
String userB = "user456";
for (int i = 0; i < 2; i++) {
System.out.println("Request " + (i + 1) + ": " +
(allowRequest(userB) ? "Allowed" : "Denied"));
}
}
}Miksi palvelukohtaiset rajat ovat tärkeitä
Palvelukohtaiset pyyntörajoitukset tarjoavat hienojakoisempaa hallintaa:
- Resurssien suojaus: Estää yhtä päätepistettä kuluttamasta palvelun tiettyjä resursseja loppuun (esimerkiksi tietokantayhteyksiä).
- Liiketoimintalogiikka: Toteuttaa rajoitukset tiettyjen käyttäjätasojen tai API-toimintojen perusteella (esimerkiksi "premium-käyttäjät saavat tehdä tähän päätepisteeseen 1000 kutsua minuutissa").
- Eristys: Yhden palvelun rajan ylittyminen ei välttämättä kaada muita palveluja.
Yhteistoiminta: kerroksellinen puolustus
Vankimmissa järjestelmissä käytetään sekä maailmanlaajuisia että palvelukohtaisia pyyntörajoituksia. Ne muodostavat kerroksellisen puolustuksen:
- Maailmanlaajuiset rajat: Toimivat ensimmäisenä puolustuslinjana, suodattavat suuria liikennemääriä ja suojaavat koko järjestelmän sisääntulopistettä.
- Palvelukohtaiset rajat: Tarjoavat hienosäädetyn hallinnan yksittäisissä palveluissa, suojaavat tiettyjä resursseja ja toteuttavat liiketoimintasääntöjä.
Ajattele tätä useina tarkistuspisteinä, joilla kullakin on eri tarkoitus.
Milloin mitäkin käytetään
Kun suunnittelet pyyntöjen rajoitusstrategiaa, huomioi seuraavat seikat:
- Maailmanlaajuinen: Sopii parhaiten laajaan suojaukseen, anonyymiin liikenteeseen ja DDoS-hyökkäysten estämiseen. Se on helppo toteuttaa infrastruktuuritasolla.
- Palvelukohtainen: Sopii erityisesti tiettyjen taustajärjestelmän resurssien suojaamiseen, käyttäjäkohtaisten kiintiöiden toteuttamiseen tai tunnistetun liikenteen käsittelyyn eri käyttöoikeustasoilla. Se edellyttää enemmän sovellustason logiikkaa.
Usein paras ratkaisu on näiden yhdistelmä.
Testaa tietosi
Oletetaan API, jonka maailmanlaajuinen pyyntöraja on 1000 pyyntöä sekunnissa ja jonka tietyn mikropalvelun päätepisteellä on käyttäjäkohtainen 10 pyynnön raja minuutissa. Käyttäjä tekee tähän päätepisteeseen 50 pyyntöä 30 sekunnin aikana.
Maailmanlaajuisten ja palvelukohtaisten rajojen yhteenveto
Olemme tarkastelleet maailmanlaajuisen ja palvelukohtaisen pyyntöjen rajoittamisen keskeisiä eroja ja yhteistoimintaa:
- Maailmanlaajuiset rajat: Toimivat järjestelmän reunalla ja suojaavat infrastruktuuria suurien liikennemäärien hyökkäyksiltä.
- Palvelukohtaiset rajat: Tarjoavat hienojakoisen hallinnan mikropalveluissa, suojaavat tiettyjä resursseja ja toteuttavat liiketoimintasääntöjä.
Yhdistämällä molemmat strategiat saat API-rajapinnoille vankan, monikerroksisen puolustuksen. Seuraavaksi perehdymme pyyntörajan ylitysten hallintaan hallitusti.
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 ”Yleinen ja palvelukohtainen nopeusrajoitus” ilmainen?
Kyllä – oppitunnin ”Yleinen ja palvelukohtainen nopeusrajoitus” 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 ”Yleinen ja palvelukohtainen nopeusrajoitus”?
Ymmärrä reunalla sovellettavien yleisten nopeusrajoitusten ja yksittäisille mikropalveluille määritettyjen rajoitusten erot ja yhteisvaikutus. 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 2/4.
Kuinka kauan ”Yleinen ja palvelukohtainen nopeusrajoitus”-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
- API Gateway -integraatiomallit
- Yleinen ja palvelukohtainen nopeusrajoitus
- Dynaaminen nopeusrajoituksen määritys
- Hajautettu rate limiting Redisillä