Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk.

Az egyik tényező, amelyet érdemes figyelembe venni az alkalmazás elkészítésekor, a felhasználóktól elvárt forgalom nagysága. A forgalom mennyisége valószínűleg több olyan tényezőt is meghatároz, amelyek magukban foglalhatják az erőforrások elosztását, különösen akkor, ha alkalmazását felhőszolgáltatónál tárolja.

A sebességkorlátozás egyike azoknak a technikáknak, amelyeket az alkalmazás vagy a hálózat forgalmának szabályozására használhat.

Mi az a díjkorlátozás?

A sebességkorlátozás egy széles körben elterjedt hozzáférés-korlátozási technika a hálózati forgalom korlátozására, elsősorban feltételezett időkereteken belül, vagy amikor a felhasználó több kérést hajtott végre.

A sebességkorlátozás népszerű az olyan kibertámadások csökkentésében, mint a nyers erő és a DDoS (elosztott szolgáltatásmegtagadás), korlátozza webkaparás, API kérések és egyéb szabálytalan felhasználói interakciók, mint például a robotok automatizálása és a szerver megterhelése.

instagram viewer

A Go első osztályú támogatást nyújt a sebességkorlátozó alkalmazásokhoz mérték csomag, amely sebességkorlátozót biztosít és együttműködik a idő csomag.

A mérték csomag a Go projekt része, de a csomag nem érhető el a szabványos könyvtárban. Telepítenie kell a csomagot a kap parancs.

Futtassa ezt a parancsot a munkakönyvtár termináljában, hogy hozzáadja a csomagot a projekt függőségeihez.

megy a "golang.org/x/time/rate" lekérése

Importálja ezeket a csomagokat a Go fájlba ehhez az oktatóanyaghoz.

import (
"kódolás/json"
"golang.org/x/time/rate"
"napló"
"net/http"
)

A json csomag egy struktúra kódolására szolgál JSON-ként az ügyfél számára. Használja a log csomaghoz log hibák a konzolban és a http csomag a végpont és a köztes szoftver felépítéséhez, valamint a kiszolgáló elindításához.

Egyszerű API létrehozása egy végponttal

Hagyományosan egy köztes szoftvert kell írni azokhoz a kezelői funkciókhoz, amelyekre korlátozni szeretné a sebességkorlátozást. Minden alkalommal, amikor a felhasználó kérést küld, a köztes szoftver ellenőrzi a kérés állapotát, mielőtt közvetítené a hozzáférést a kezelő funkcióhoz, az esettől függően.

Íme a struktúramodell karakterlánc-mezőkkel, amelyeket az ügyfélnek kell kódolnia.

típus Üzenet struct {
Válasz húr`json:"válasz"`
Leírás húr`json:"leírás"`
}

A kezelő függvény a tartalomtípust JSON-ra állítja, sikeres állapotkódot ír, és egy kódolt struktúrapéldányt küld vissza az ügyfélnek.

funcvégpontPélda(író http. ResponseWriter, kérje a *http. Kérés) {
író. Header().Set("Content-Type", "application/json")
író. WriteHeader (http. ÁllapotOK)
üzenet := Üzenet{
Válasz: "Sikeres",
Leírás: "Sikeresen elérte az API végpontot",
}
hiba := json. NewEncoder (író). Kódolás (&üzenet)
ha hiba! = nulla {
Visszatérés
}
}

A végpontPélda kezelő függvény egy http csomag író és kérés metóduspéldány, és üzenetet küld vissza az ügyfélnek a író példa.

Rate limiting Simple Go alkalmazás

Hasonló a sebességkorlátozás a felhasználó kérelmeinek száma vagy a rendelkezésre álló kérések száma alapján. Mindig létre kell hoznia egy korlátozót az engedélyezési folyamat előtt.

Így hozhat létre sebességkorlátozót és engedélyezheti a felhasználókat a kérések száma alapján.

funcrateLimiterMiddleware(következő func(író http. ResponseWriter, kérje a *http. Kérés)) http.HandlerFunc {
limiter := ráta. NewLimiter(3, 6) // legfeljebb 6 kérés, majd további három kérés másodpercenként
Visszatérés http. HandlerFunc(func(író http. ResponseWriter, kérje a *http. Kérés) {
ha !korlátozó. Lehetővé teszi() {
író. Ír([]byte("áramkorlát túllépve"))
Visszatérés
} más {
végpontPélda (író, kérés)
}
})
}

A rateLimiterMiddleware A kezelő függvény egy köztes szoftver, amely elfogad egy kezelő függvényt argumentumként, és visszaadja a jogosultság eredményét, miután létrehoz egy új sebességkorlátozót a NewLimiter metódus, amely két paramétert vesz fel a másodpercenkénti kérések számához a megadott maximális kérések után.

A Lehetővé teszi a limiter példány metódusa logikai értéket ad vissza az engedélyezett kérések állapota alapján. A rateLimiterMiddleware visszaadja a JSON üzenetet, ha a kérés engedélyezett, vagy a "áramkorlát túllépve" üzenetet, amikor az ügyfél a maximális számú kérést elküldte.

funcfő-() {
http. HandleFunc("/home", rateLimiterMiddleware (végpontPélda))
hiba := http. ListenAndServe(":8080", nulla)
ha hiba! = nulla {
log. Println("Hiba történt a porton:8080", hiba)
}
}

A fő- függvény rögzíti a /home végpont a rateLimiterMiddleware kezelő funkció, amely beveszi a végpontPélda kezelő funkció.

A ListenAndServe metódus elindít egy szervert a localhost porton 8080 és visszaadja az esetleges hibákat.

Ezt a parancsot futtathatja a munkakönyvtár terminálján vagy a egy bash script hogy tesztelje a végpontot a kiszolgáló futtatása után.

számára én ban ben {1..10}; csináld becsavar http://localhost: 8080/otthon; Kész

A kód eléri a /home végpont tízszer egy kéréssel. Íme a kérések eredménye.

A hatodik kérés után (maximum) az ügyfél jogosulatlan, és többé nem férhet hozzá a végponthoz.

A díjkorlátozás fontos

A sebességkorlátozás alapvető fontosságú, különösen akkor, ha az alkalmazás üzemeltetési költségeit szeretné csökkenteni, csökkenteni szeretné a robotok által okozott interferenciát, vagy meg szeretné védeni alkalmazását a kibertámadásoktól. Hasonló a Go-hoz mérték csomag, az npm biztosítja a expressz kamatkorlát csomagot a sebességkorlátozott expressz alkalmazásokhoz.