Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju.

Viens no faktoriem, kas jāņem vērā, veidojot lietojumprogrammu, ir datplūsmas apjoms, ko sagaidāt no lietotājiem. Datplūsmas apjoms, iespējams, nosaka vairāk faktoru, kas var ietvert resursu piešķiršanu, it īpaši, ja mitināt savu lietotni mākoņpakalpojumu sniedzējā.

Ātruma ierobežošana ir viena no metodēm, ko varat izmantot, lai kontrolētu trafiku savā lietojumprogrammā vai tīklā.

Kas ir likmes ierobežošana?

Ātruma ierobežošana ir plaši izplatīts piekļuves ierobežošanas paņēmiens tīkla trafika ierobežošanai, galvenokārt spekulētos laika periodos vai tad, kad lietotājs ir izpildījis vairākus pieprasījumus.

Likmes ierobežošana ir populāra, lai samazinātu kiberuzbrukumus, piemēram, brutālu spēku un DDoS (Distributed Denial of Service), ierobežojot tīmekļa skrāpēšana, API pieprasījumi un citas neregulāras lietotāja mijiedarbības, piemēram, robotprogrammatūras automatizācija un servera noslodze.

instagram viewer

Go nodrošina pirmās klases atbalstu ātruma ierobežojošajām lietojumprogrammām likme pakotne, kas nodrošina ātruma ierobežotāju un sadarbojas ar laiks iepakojums.

The likme pakotne ir daļa no Go projekta, taču pakotne nav pieejama standarta bibliotēkā. Jums būs jāinstalē pakotne ar gūt komandu.

Palaidiet šo komandu sava darba direktorija terminālī, lai pievienotu pakotni sava projekta atkarībām.

aiziet saņemt "golang.org/x/time/rate"

Importējiet šīs pakotnes savā Go failā šai apmācībai.

imports (
"kodējums/json"
"golang.org/x/time/rate"
"baļķis"
"net/http"
)

The json pakotne ir paredzēta struktūras kodēšanai klientam kā JSON. Jūs izmantosit žurnāls iepakojums uz žurnāls kļūdas konsolē un http pakotni, lai izveidotu galapunktu un starpprogrammatūru un palaistu serveri.

Vienkāršas API izveide ar vienu galapunktu

Parasti jums ir jāraksta starpprogrammatūra apdarinātāja funkcijām, kurām vēlaties noteikt ātruma ierobežojumu. Katru reizi, kad lietotājs nosūta pieprasījumu, starpprogrammatūra apstiprina pieprasījuma statusu, pirms tiek nodota piekļuve apstrādātāja funkcijai atkarībā no gadījuma.

Šis ir struktūras modelis ar virknes laukiem, ko iekodēsit klientam.

veids Ziņojums struktūra {
Atbilde virkne`json:"atbilde"`
Apraksts virkne`json:"apraksts"`
}

Apdarinātāja funkcija iestatīs satura tipu uz JSON, uzrakstīs veiksmīgu statusa kodu un atgriezīs klientam kodētu struktūras gadījumu.

funcbeigu punktsPiemērs(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt) {
rakstnieks. Header().Set("Content-Type", "application/json")
rakstnieks. WriteHeader (http. Statuss OK)
ziņa := Ziņa{
Atbilde: "Veiksmīgi",
Apraksts: "Jūs esat veiksmīgi sasniedzis API galapunktu",
}
kļūda := json. NewEncoder (rakstītājs). Kodēt (&ziņojums)
ja kļūda! = nulle {
atgriezties
}
}

The beigu punktsPiemērs apdarinātāja funkcija uzņem an http iepakojums rakstnieks un pieprasījumu metodes gadījumu un atgriež klientam ziņojumu ar rakstnieks piemēram.

Likmes ierobežojums vienkāršai lietojumprogrammai

Likmes ierobežošana, izmantojot lietotāja pieprasījumu skaitu vai pieejamo pieprasījumu skaitu, ir līdzīga. Pirms autorizācijas procesa jums vienmēr būs jāizveido ierobežotājs.

Lūk, kā varat izveidot ātruma ierobežotāju un autorizēt lietotājus, pamatojoties uz pieprasījumu skaitu.

funcrateLimiterMiddleware(Nākamais func(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt)) http.HandlerFunc {
ierobežotājs := likme. NewLimiter(3, 6) // ne vairāk kā 6 pieprasījumi un pēc tam vēl trīs pieprasījumi sekundē
atgriezties http. HandlerFunc(func(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt) {
ja !ierobežotājs. Atļaut() {
rakstnieks. Rakstīt ([]baits("pārsniegts likmes ierobežojums"))
atgriezties
} cits {
beigu punktsPiemērs (rakstītājs, pieprasījums)
}
})
}

The rateLimiterMiddleware apdarinātāja funkcija ir starpprogrammatūra, kas pieņem apdarinātāja funkciju kā argumentu un atgriež autorizācijas rezultātu pēc jauna ātruma ierobežotāja izveides ar NewLimiter metode, kas ņem divus parametrus pieprasījumu skaitam sekundē pēc norādītā maksimālā pieprasījumu skaita.

The Atļaut ierobežotāja instances metode atgriež Būla vērtību, pamatojoties uz autorizēto pieprasījumu statusu. The rateLimiterMiddleware atgriež JSON ziņojumu, ja pieprasījums ir autorizēts vai "pārsniegts likmes ierobežojums" ziņojumu, kad klients ir nosūtījis maksimālo pieprasījumu skaitu.

funcgalvenais() {
http. HandleFunc("/home", rateLimiterMiddleware (galapunkta piemērs))
kļūda := http. KlausītiesAndServe(":8080", nulle)
ja kļūda! = nulle {
žurnāls. Println("Radās kļūda, klausoties portā:8080", kļūda)
}
}

The galvenais funkcija piestiprina /home galapunkts uz rateLimiterMiddleware apdarinātāja funkcija, kas uzņem beigu punktsPiemērs apdarinātāja funkcija.

The Klausieties un kalpojiet metode startē serveri vietējā resursdatora portā 8080 un atgriež iespējamās kļūdas.

Šo komandu var palaist darba direktorijas terminālī vai ar bash skripts lai pārbaudītu galapunktu pēc servera palaišanas.

priekš i iekšā {1..10}; darīt čokurošanās http://localhost: 8080/mājās; darīts

Kods nokļūst uz /home galapunkts desmit reizes ar pieprasījumu. Šeit ir pieprasījumu rezultāti.

Pēc sestā pieprasījuma (maksimums) klients ir nesankcionēts un vairs nevar piekļūt galapunktam.

Likmes ierobežošana ir svarīga

Likmes ierobežošana ir būtiska, it īpaši, ja vēlaties samazināt lietojumprogrammas mitināšanas izmaksas, samazināt robotu traucējumus vai aizsargāt savu lietotni pret kiberuzbrukumiem. Līdzīgi kā Go's likme paketi, npm nodrošina ekspreslikmes limits pakotni uz ātruma ierobežojuma ātrām lietojumprogrammām.