Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz.

Uygulamanızı oluştururken dikkate almak isteyebileceğiniz faktörlerden biri, kullanıcılardan beklediğiniz trafik miktarıdır. Özellikle uygulamanızı bir bulut hizmeti sağlayıcısında barındırıyorsanız, trafik miktarı muhtemelen kaynak tahsisini içerebilecek daha fazla faktöre karar verir.

Hız sınırlama, uygulamanız veya ağınızdaki trafiği kontrol etmek için kullanabileceğiniz tekniklerden biridir.

Hız Sınırlandırma Nedir?

Hız sınırlama, ağ trafiğini, öncelikle tahmin edilen zaman çerçeveleri içinde veya kullanıcı birkaç istek gerçekleştirdiğinde sınırlamak için yaygın bir erişim kısıtlama tekniğidir.

Hız sınırlama, kaba kuvvet gibi siber saldırıları azaltmak için popülerdir ve DDoS (Dağıtılmış Hizmet Reddi), sınırlayıcı ağ kazıma, API istekleri ve bot otomasyonu ve sunucu yükü gibi diğer düzensiz kullanıcı etkileşimleri.

instagram viewer

Go, hız sınırlayıcı uygulamalar için birinci sınıf destek sağlar. oran hız sınırlayıcı sağlayan ve birlikte çalışan paket zaman paket.

bu oran package, Go projesinin bir parçasıdır, ancak standart kitaplıkta mevcut değildir. ile paketi kurmanız gerekir. elde etmek emretmek.

Paketi projenizin bağımlılıklarına eklemek için çalışma dizininizin terminalinde bu komutu çalıştırın.

Gitmek "golang.org/x/time/rate" dosyasını edinin

Bu eğitim için bu paketleri Go dosyanıza aktarın.

içe aktarmak (
"kodlama/json"
"golang.org/x/time/rate"
"kayıt"
"ağ/http"
)

bu json paket, bir yapıyı istemciye JSON olarak kodlamak içindir. Şunu kullanacaksınız: kayıt paketlemek kayıt konsoldaki hatalar ve http uç noktayı ve ara yazılımı oluşturmak ve bir sunucu başlatmak için paket.

Tek Uç Nokta İle Basit Bir API Oluşturma

Geleneksel olarak, derecelendirmek istediğiniz işleyici işlevleri için bir ara yazılım yazacaksınız. Kullanıcı her istek gönderdiğinde, ara yazılım duruma bağlı olarak işleyici işlevine erişimi aktarmadan önce istek durumunu doğrular.

İşte istemciye kodlayacağınız dize alanlarını içeren yapı modeli.

tip İleti yapı {
Cevap sicim`json:"yanıt"`
Tanım sicim`json:"açıklama"`
}

İşleyici işlevi, içerik türünü JSON olarak ayarlayacak, başarılı bir durum kodu yazacak ve istemciye kodlanmış bir yapı örneği döndürecektir.

işlevuç noktaÖrnek(yazar http. ResponseWriter, istek *http. Rica etmek) {
yazar. Header().Set("Content-Type", "application/json")
yazar. Yazı Başlığı (http. DurumTamam)
mesaj := Mesaj{
Yanıt: "Başarılı",
Açıklama: "API bitiş noktasına başarıyla ulaştınız",
}
hata := json. NewEncoder (yazar).Encode(&mesaj)
eğer hata!= sıfır {
geri dönmek
}
}

bu uç noktaÖrnek işleyici işlevi bir http paket yazar Ve rica etmek yöntem örneği ve müşteriye bir mesaj döndürür. yazar misal.

Simple Go Uygulamasını Hız Sınırlandırma

Bir kullanıcının istek sayısı veya mevcut istek sayısı aracılığıyla hız sınırlaması benzerdir. Yetkilendirme işleminden önce her zaman bir sınırlayıcı oluşturmanız gerekir.

Hız sınırlayıcıyı nasıl oluşturabileceğiniz ve kullanıcıları istek sayısına göre nasıl yetkilendirebileceğiniz aşağıda açıklanmıştır.

işlevrateLimiterMiddleware(Sonraki işlev(yazar http. ResponseWriter, istek *http. Rica etmek)) http.HandlerFunc {
sınırlayıcı := oran. Yeni Sınırlayıcı(3, 6) // maksimum 6 istek ve ardından saniyede üç istek daha
geri dönmek http. HandlerFunc(işlev(yazar http. ResponseWriter, istek *http. Rica etmek) {
eğer !sınırlayıcı. İzin vermek() {
yazar. Yazmak([]bayt("hız limiti aşıldı "))
geri dönmek
} başka {
endpointÖrnek (yazar, istek)
}
})
}

bu rateLimiterMiddleware işleyici işlevi, bir işleyici işlevini bağımsız değişken olarak kabul eden ve yeni bir hız sınırlayıcı oluşturduktan sonra yetkilendirmenin sonucunu döndüren bir ara katman yazılımıdır. Yeni Sınırlayıcı Belirtilen maksimum isteklerden sonra saniye başına istek sayısı için iki parametre alan yöntem.

bu İzin vermek sınırlayıcı örneğinin yöntemi, yetkili isteklerin durumuna göre bir boole değeri döndürür. bu rateLimiterMiddleware istek yetkilendirildiyse veya istek onaylandıysa JSON mesajını döndürür "hız limiti aşıldı " İstemci maksimum istek sayısını gönderdiğinde mesaj.

işlevana() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
hata := http. ListenAndServe(":8080", sıfır)
eğer hata!= sıfır {
kayıt. Println("Bağlantı noktasında dinleme sırasında bir hata oluştu:8080", hata)
}
}

bu ana işlevi bağlar /home bitiş noktası rateLimiterMiddleware alan işleyici işlevi uç noktaÖrnek işleyici işlevi.

bu Dinle ve Sun yöntem, localhost bağlantı noktasında bir sunucu başlatır 8080 ve olası hataları döndürür.

Bu komutu çalışma dizininizin terminalinde veya bir bash betiği sunucuyu çalıştırdıktan sonra uç noktayı test etmek için.

için Ben içinde {1..10}; Yapmak kıvırmak http://localhost: 8080/ev; Tamamlandı

Kod şuna çarpar: /home bir istek ile uç nokta on kez. İşte taleplerin sonuçları.

Altıncı istekten sonra (maksimum), istemci yetkisizdir ve artık uç noktaya erişemez.

Hız Sınırlaması Önemlidir

Hız sınırlaması, özellikle uygulamanızı barındırma maliyetini azaltmak, bot müdahalesini azaltmak veya uygulamanızı siber saldırılardan korumak istiyorsanız çok önemlidir. Benzeri Go's oran paket, npm sağlar hızlı hız sınırı hız sınırı ekspres uygulamaları için paket.