Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu.

Jedným z faktorov, ktoré možno budete chcieť zvážiť pri vytváraní aplikácie, je objem návštevnosti, ktorý od používateľov očakávate. Množstvo návštevnosti môže rozhodnúť o viacerých faktoroch, ktoré môžu zahŕňať prideľovanie zdrojov, najmä ak hosťujete svoju aplikáciu u poskytovateľa cloudových služieb.

Obmedzenie rýchlosti je jednou z techník, ktoré môžete použiť na riadenie prevádzky vo vašej aplikácii alebo sieti.

Čo je obmedzenie sadzby?

Obmedzenie rýchlosti je rozšírená technika obmedzenia prístupu na obmedzenie sieťovej prevádzky, predovšetkým v rámci špekulovaných časových rámcov alebo keď používateľ vykonal niekoľko požiadaviek.

Obmedzenie rýchlosti je populárne na zníženie kybernetických útokov, ako je hrubá sila a DDoS (distribuované odmietnutie služby), obmedzujúce zoškrabovanie webu, požiadavky API a ďalšie nepravidelné interakcie používateľov, ako je automatizácia robotov a zaťaženie servera.

instagram viewer

Go poskytuje prvotriednu podporu pre aplikácie obmedzujúce rýchlosť sadzba balík, ktorý poskytuje obmedzovač rýchlosti a spolupracuje s čas balík.

The sadzba balík je súčasťou projektu Go, ale balík nie je dostupný v štandardnej knižnici. Budete musieť nainštalovať balík s dostať príkaz.

Spustite tento príkaz v termináli vášho pracovného adresára a pridajte balík do závislostí vášho projektu.

ísť získať "golang.org/x/time/rate"

Importujte tieto balíčky do svojho súboru Go pre tento návod.

importovať (
"kódovanie/json"
"golang.org/x/time/rate"
"log"
"net/http"
)

The json balík je určený na kódovanie štruktúry ako JSON pre klienta. Budete používať log zabaliť do log chyby na konzole a http balík na zostavenie koncového bodu a middlewaru a spustenie servera.

Vytvorenie jednoduchého rozhrania API s jedným koncovým bodom

Zvyčajne napíšete middleware pre funkcie obsluhy, ktoré chcete obmedziť. Zakaždým, keď používateľ odošle požiadavku, midlvér overí stav požiadavky pred odovzdaním prístupu k funkcii obsluhy, v závislosti od prípadu.

Tu je model štruktúry s poľami reťazcov, ktoré zakódujete pre klienta.

typu Správa štrukturovať {
odpoveď reťazec`json:"response"`
Popis reťazec`json:"popis"`
}

Funkcia handlera nastaví typ obsahu na JSON, zapíše úspešný stavový kód a vráti klientovi zakódovanú inštanciu štruktúry.

funckoncový bodPríklad(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
spisovateľ. Header().Set("Content-Type", "application/json")
spisovateľ. WriteHeader (http. Stav OK)
správa := správa{
Odpoveď: "Úspešne",
Popis: "Úspešne ste dosiahli koncový bod API",
}
chyba := json. NewEncoder (zapisovač).Encode(&správa)
ak chyba!= nula {
vrátiť
}
}

The koncový bodPríklad funkcia handlera zaberá http balík spisovateľ a žiadosť inštanciu metódy a klientovi vráti správu s príponou spisovateľ príklad.

Obmedzenie rýchlosti aplikácie Simple Go

Obmedzenie sadzieb prostredníctvom počtu žiadostí používateľa alebo dostupného počtu žiadostí je podobné. Pred procesom autorizácie budete vždy musieť vytvoriť obmedzovač.

Tu je návod, ako môžete vytvoriť obmedzovač rýchlosti a autorizovať používateľov na základe počtu žiadostí.

funcrateLimiterMiddleware(Ďalšie func(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť)) http.HandlerFunc {
obmedzovač := sadzba. NewLimiter(3, 6) // max 6 požiadaviek a potom ďalšie tri požiadavky za sekundu
vrátiť http. HandlerFunc(func(spisovateľ http. ResponseWriter, vyžiadajte *http. žiadosť) {
ak !obmedzovač. Allow() {
spisovateľ. Napíšte ([]byte("limit prekročený "))
vrátiť
} inak {
endpointExample (spisovateľ, požiadavka)
}
})
}

The rateLimiterMiddleware handler function je middleware, ktorý akceptuje funkciu handlera ako argument a vráti výsledok autorizácie po vytvorení nového obmedzovača rýchlosti pomocou NewLimiter metóda, ktorá má dva parametre pre počet požiadaviek za sekundu po zadanom maximálnom množstve požiadaviek.

The Povoliť metóda inštancie obmedzovača vracia boolovskú hodnotu na základe stavu autorizovaných požiadaviek. The rateLimiterMiddleware vráti správu JSON, ak je požiadavka autorizovaná alebo "limit prekročený " správu, keď klient odoslal maximálny počet požiadaviek.

funcHlavná() {
http. HandleFunc("/home", rateLimiterMiddleware (príklad koncového bodu))
chyba := http. Počúvaj a podávaj(":8080", nula)
ak chyba!= nula {
log. Println("Vyskytla sa chyba pri počúvaní na porte:8080", chyba)
}
}

The Hlavná funkcia pripojí /home koncový bod k rateLimiterMiddleware handler funkciu, ktorá preberá koncový bodPríklad funkcia manipulátora.

The Počúvajte a podávajte metóda spúšťa server na porte localhost 8080 a vráti možné chyby.

Tento príkaz môžete spustiť na termináli vášho pracovného adresára alebo pomocou bash skript na testovanie koncového bodu po spustení servera.

pre i v {1..10}; robiť zvlniť http://localhost: 8080/domov; hotový

Kód narazí na /home koncový bod desaťkrát s požiadavkou. Tu sú výsledky žiadostí.

Po šiestej požiadavke (maximálne) je klient neoprávnený a už nemôže pristupovať ku koncovému bodu.

Obmedzenie sadzieb je dôležité

Obmedzenie rýchlosti je nevyhnutné, najmä ak sa snažíte znížiť náklady na hosťovanie svojej aplikácie, chcete znížiť rušenie robotov alebo zabezpečiť svoju aplikáciu pred kybernetickými útokmi. Podobné ako Go's sadzba balík, npm poskytuje expresný limit balík na expresné aplikácie s obmedzením sadzby.