Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion.

Yksi tekijöistä, joita sinun kannattaa harkita sovellustasi rakentaessasi, on käyttäjiltä odottamasi liikenteen määrä. Liikenteen määrä mahdollisesti määrittää enemmän tekijöitä, joihin voi sisältyä resurssien allokointi, varsinkin jos isännöit sovellustasi pilvipalveluntarjoajalta.

Nopeuden rajoittaminen on yksi tekniikoista, joita voit käyttää sovelluksesi tai verkon liikenteen ohjaamiseen.

Mikä on hinnanrajoitus?

Nopeuden rajoitus on laajalle levinnyt pääsynrajoitustekniikka verkkoliikenteen rajoittamiseen ensisijaisesti spekuloitujen aikakehysten sisällä tai kun käyttäjä on suorittanut useita pyyntöjä.

Nopeuden rajoittaminen on suosittua kyberhyökkäysten, kuten raa'an voiman, ja DDoS (Distributed Denial of Service), rajoittaa verkon raapiminen, API-pyynnöt ja muut epäsäännölliset käyttäjien vuorovaikutukset, kuten robottiautomaatio ja palvelimen rasitus.

instagram viewer

Go tarjoaa ensiluokkaista tukea nopeutta rajoittaville sovelluksille korko paketti, joka tarjoaa nopeuden rajoittimen ja toimii yhteen aika paketti.

The korko paketti on osa Go-projektia, mutta paketti ei ole saatavilla vakiokirjastossa. Sinun on asennettava paketti, jossa on saada komento.

Suorita tämä komento työhakemistosi päätteessä lisätäksesi paketin projektisi riippuvuuksiin.

mennä hanki "golang.org/x/time/rate"

Tuo nämä paketit Go-tiedostoosi tätä opetusohjelmaa varten.

tuonti (
"koodaus/json"
"golang.org/x/time/rate"
"Hirsi"
"net/http"
)

The json paketti on tarkoitettu rakenteen koodaamiseen JSON-muodossa asiakkaalle. Tulet käyttämään Hirsi paketti kohteeseen Hirsi virheitä konsoliin ja http paketti päätepisteen ja väliohjelmiston rakentamiseen ja palvelimen käynnistämiseen.

Yksinkertaisen sovellusliittymän rakentaminen yhdellä päätepisteellä

Perinteisesti kirjoitat väliohjelmiston käsittelijän toiminnoille, joita haluat rajoittaa. Joka kerta kun käyttäjä lähettää pyynnön, väliohjelmisto vahvistaa pyynnön tilan ennen kuin välittää pääsyn käsittelijätoimintoon, tapauksesta riippuen.

Tässä on rakennemalli merkkijonokentillä, jotka koodaat asiakkaalle.

tyyppi Viesti struct {
Vastaus merkkijono`json:"vastaus"`
Kuvaus merkkijono`json:"description"`
}

Käsittelijätoiminto asettaa sisältötyypiksi JSON, kirjoittaa onnistuneen tilakoodin ja palauttaa asiakkaalle koodatun rakenne-ilmentymän.

funcpäätepisteEsimerkki(kirjoittaja http. ResponseWriter, pyydä *http. Pyyntö) {
kirjailija. Header().Set("Content-Type", "application/json")
kirjailija. WriteHeader (http. Tila OK)
viesti := Viesti{
Vastaus: "Onnistui",
Kuvaus: "Olet onnistuneesti osunut API-päätepisteeseen",
}
virhe := json. NewEncoder (kirjoittaja). Koodaa (&viesti)
jos virhe! = nolla {
palata
}
}

The päätepisteEsimerkki Käsittelijätoiminto ottaa sisään an http paketti kirjailija ja pyyntö menetelmän esiintymä ja palauttaa asiakkaalle viestin, jossa on kirjailija ilmentymä.

Hintarajoitus Simple Go -sovellukselle

Nopeuden rajoittaminen käyttäjän pyyntöjen tai käytettävissä olevan pyyntöjen määrän perusteella on samanlainen. Sinun on aina luotava rajoitin ennen valtuutusprosessia.

Näin voit luoda nopeudenrajoittimen ja valtuuttaa käyttäjiä pyyntöjen määrän perusteella.

funcrateLimiterMiddleware(Seuraava func(kirjoittaja http. ResponseWriter, pyydä *http. Pyyntö)) http.HandlerFunc {
rajoitin := korko. NewLimiter(3, 6) // enintään 6 pyyntöä ja sitten kolme muuta pyyntöä sekunnissa
palata http. HandlerFunc(func(kirjoittaja http. ResponseWriter, pyydä *http. Pyyntö) {
jos !rajoitin. Sallia() {
kirjailija. Kirjoittaa([]tavu("hintaraja ylitetty"))
palata
} muu {
endpointEsimerkki (kirjoittaja, pyyntö)
}
})
}

The rateLimiterMiddleware Käsittelijäfunktio on väliohjelmisto, joka hyväksyy käsittelijäfunktion argumenttina ja palauttaa valtuutuksen tuloksen luotuaan uuden nopeudenrajoittimen Uusi Limiter menetelmä, joka ottaa kaksi parametria pyyntöjen määrälle sekunnissa määritetyn enimmäispyyntöjen jälkeen.

The Sallia rajoitinilmentymän menetelmä palauttaa loogisen arvon valtuutettujen pyyntöjen tilan perusteella. The rateLimiterMiddleware palauttaa JSON-sanoman, jos pyyntö on valtuutettu tai "hintaraja ylitetty" viestin, kun asiakas on lähettänyt enimmäismäärän pyyntöjä.

funcpää() {
http. HandleFunc("/home", rateLimiterMiddleware (päätepisteesimerkki))
virhe := http. ListenAndServe(":8080", nolla)
jos virhe! = nolla {
Hirsi. Println("Virhe kuuntelussa portissa:8080", virhe)
}
}

The pää toiminto kiinnittää /home päätepisteeseen rateLimiterMiddleware Käsittelijätoiminto, joka ottaa vastaan päätepisteEsimerkki käsittelijän toiminto.

The KuunteleJaPalvele menetelmä käynnistää palvelimen localhost-portissa 8080 ja palauttaa mahdolliset virheet.

Voit suorittaa tämän komennon työhakemistosi päätteessä tai käyttämällä bash-skripti testata päätepistettä palvelimen suorittamisen jälkeen.

varten i sisään {1..10}; tehdä kiemura http://localhost: 8080/koti; tehty

Koodi osuu /home päätepiste kymmenen kertaa pyynnön kanssa. Tässä on pyyntöjen tulokset.

Kuudennen pyynnön (enintään) jälkeen asiakas on luvaton eikä voi enää käyttää päätepistettä.

Hintarajoitus on tärkeää

Nopeuden rajoittaminen on välttämätöntä, varsinkin jos haluat leikata sovelluksesi isännöintikustannuksia, vähentää bottien häiriöitä tai suojata sovelluksesi kyberhyökkäyksiltä. Samanlainen kuin Go's korko paketti, npm tarjoaa pikahintaraja paketti nopeusrajoitussovelluksiin.