Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo.

Eden od dejavnikov, ki ga boste morda želeli upoštevati pri izdelavi aplikacije, je količina prometa, ki ga pričakujete od uporabnikov. Količina prometa morda odloča o več dejavnikih, ki lahko vključujejo dodeljevanje virov, zlasti če svojo aplikacijo gostite pri ponudniku storitev v oblaku.

Omejevanje hitrosti je ena od tehnik, ki jo lahko uporabite za nadzor prometa v vaši aplikaciji ali omrežju.

Kaj je omejevanje stopnje?

Omejevanje hitrosti je splošno razširjena tehnika omejevanja dostopa za omejevanje omrežnega prometa, predvsem v špekuliranih časovnih okvirih ali ko je uporabnik izvedel več zahtev.

Omejitev hitrosti je priljubljena za zmanjšanje kibernetskih napadov, kot sta brutalna sila in DDoS (distribuirana zavrnitev storitve), omejevanje spletno strganje, zahteve API-ja in druge nepravilne uporabniške interakcije, kot sta avtomatizacija botov in obremenitev strežnika.

instagram viewer

Go zagotavlja prvovrstno podporo za aplikacije z omejevanjem hitrosti v oceniti paket, ki ponuja omejevalnik hitrosti in deluje z čas paket.

The oceniti paket je del projekta Go, vendar paket ni na voljo v standardni knjižnici. Namestiti boste morali paket z dobiti ukaz.

Zaženite ta ukaz v terminalu vašega delovnega imenika, da dodate paket v odvisnosti vašega projekta.

pojdi pridobi "golang.org/x/time/rate"

Uvozite te pakete v datoteko Go za to vadnico.

uvoz (
"kodiranje/json"
"golang.org/x/time/rate"
"dnevnik"
"net/http"
)

The json paket je za kodiranje strukture kot JSON za odjemalca. Uporabili boste dnevnik paket za dnevnik napake na konzoli in http paket za izdelavo končne točke in vmesne programske opreme ter zagon strežnika.

Izdelava preprostega API-ja z eno končno točko

Običajno boste napisali vmesno programsko opremo za funkcije obdelovalca, ki jih želite omejiti. Vsakič, ko uporabnik pošlje zahtevo, vmesna programska oprema potrdi status zahteve, preden posreduje dostop funkciji upravljalnika, odvisno od primera.

Tukaj je model strukture s polji nizov, ki jih boste kodirali odjemalcu.

vrsta Sporočilo struct {
Odziv vrvica`json:"odziv"`
Opis vrvica`json:"opis"`
}

Funkcija za obravnavo bo nastavila vrsto vsebine na JSON, napisala uspešno statusno kodo in odjemalcu vrnila kodiran primerek strukture.

funkkončna točkaExample(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
pisatelj. Header().Set("Content-Type", "application/json")
pisatelj. WriteHeader (http. stanje v redu)
sporočilo := sporočilo{
Odgovor: "Uspešno",
Opis: "Uspešno ste dosegli končno točko API-ja",
}
napaka := json. NewEncoder (pisovalec).Encode(&message)
če napaka!= nič {
vrnitev
}
}

The končna točkaExample funkcija obdelovalca sprejme an http paket pisatelj in prošnja primerek metode in odjemalcu vrne sporočilo z pisatelj primerek.

Omejitev hitrosti aplikacije Simple Go

Podobno je omejevanje hitrosti preko uporabnikovega števila zahtev ali razpoložljivega števila zahtev. Pred postopkom avtorizacije boste morali vedno ustvariti omejevalnik.

Tukaj je opisano, kako lahko ustvarite omejevalnik hitrosti in avtorizirate uporabnike glede na število zahtev.

funkrateLimiterMiddleware(Naslednji funk(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja)) http.HandlerFunc {
omejevalnik := stopnja. NewLimiter(3, 6) // največ 6 zahtev in nato še tri zahteve na sekundo
vrnitev http. HandlerFunc(funk(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
če !omejevalnik. Dovoli() {
pisatelj. Napiši ([]bajt("omejitev stopnje presežena"))
vrnitev
} drugače {
endpointExample (pisovalec, zahteva)
}
})
}

The rateLimiterMiddleware funkcija obravnave je vmesna programska oprema, ki sprejme funkcijo obravnave kot argument in vrne rezultat avtorizacije po ustvarjanju novega omejevalnika hitrosti z NewLimiter metoda, ki sprejme dva parametra za število zahtev na sekundo po podanem največjem številu zahtev.

The Dovoli metoda primerka omejevalnika vrne logično vrednost na podlagi statusa pooblaščenih zahtev. The rateLimiterMiddleware vrne sporočilo JSON, če je zahteva avtorizirana ali "omejitev hitrosti presežena" sporočilo, ko odjemalec pošlje največje število zahtev.

funkglavni() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
napaka := http. ListenAndServe(":8080", nič)
če napaka!= nič {
dnevnik. Println("Pri poslušanju na vratih je prišlo do napake:8080", napaka)
}
}

The glavni funkcija namesti /home končna točka do rateLimiterMiddleware funkcija obdelovalca, ki sprejme končna točkaExample funkcija obdelovalca.

The ListenAndServe metoda zažene strežnik na vratih lokalnega gostitelja 8080 in vrne morebitne napake.

Ta ukaz lahko zaženete na terminalu vašega delovnega imenika ali z skript bash da preizkusite končno točko po zagonu strežnika.

za jaz v {1..10}; narediti curl http://localhost: 8080/domov; Končano

Koda zadene /home končno točko desetkrat z zahtevo. Tukaj so rezultati zahtev.

Po šesti zahtevi (največ) je odjemalec nepooblaščen in ne more več dostopati do končne točke.

Omejitev hitrosti je pomembna

Omejitev hitrosti je bistvenega pomena, zlasti če želite zmanjšati stroške gostovanja svoje aplikacije, želite zmanjšati motnje botov ali zaščititi svojo aplikacijo pred kibernetskimi napadi. Podobno kot Go's oceniti paket, npm zagotavlja omejitev hitre stopnje paket za hitre aplikacije z omejitvijo hitrosti.