Golang API’nizi Redis ile Hız Sınırlama
Bu makalede, Golang API’nizi Redis kullanarak nasıl hız sınırlandıracağınızı adım adım öğreneceğiz. Hız sınırlama, bir API’ye yapılan istek sayısını belirli bir zaman dilimi içerisinde sınırlayarak, kötü amaçlı kullanıcılardan kaynaklanan aşırı yüklenmeyi ve kaynak tükenmesini önlemek için gerekli bir uygulamadır.
Neden Hız Sınırlama Gereklidir?
Hız sınırlama, API’nizin güvenliğini sağlamak için çok önemlidir. Bir API’ye yapılan istek sayısı kontrol edilmezse, kötü niyetli kullanıcılar API’nizi aşırı yüklemeye ve performansını etkilemeye çalışabilirler. Bunun sonucunda, meşru kullanıcıların API’ye erişimi engellenebilir ve hatta API çökebilir.
Redis ile Hız Sınırlama Nasıl Yapılır?
Redis, bu amaç için ideal bir araçtır çünkü:
- Hızlı ve verimlidir
- Dağıtık sistemlerde iyi çalışır
- Karmaşık anahtar-değer çifti depolama olanağı sağlar
Redis’i kullanarak hız sınırlama uygulamanın temel adımları şunlardır:
- İstekleri izleme: Her istekte, kullanıcı veya IP adresi gibi bir kimlik belirleyiciye göre bir Redis anahtarı oluşturun. Bu anahtar, yapılan istek sayısını saklamak için kullanılacak.
- Sınırları uygulama: Bir zaman dilimi içerisinde izin verilen maksimum istek sayısını tanımlayın.
- Sınırları kontrol etme: Her istekte, Redis’teki ilgili anahtardaki istek sayısını kontrol edin. Eğer sınır aşılmışsa, isteği reddedin.
- Süre aşımını yönetme: Zaman dilimi bittiğinde, Redis anahtarındaki istek sayısını sıfırlayın.
Golang’da Redis ile Hız Sınırlama Uygulaması
İşte Golang’da Redis ile hız sınırlama uygulaması için bir örnek kod:
“`go
package main
import (
“fmt”
“time”
“github.com/go-redis/redis/v8”
)
func main() {
// Redis bağlantısı oluşturma
rdb := redis.NewClient(&redis.Options{
Addr: “localhost:6379”,
Password: “”, // Redis şifrenizi buraya girin
DB: 0, // Veri tabanı numarası
})
// Test isteği gönderme
requestCount, err := rdb.Incr(“user:123:request_count”).Result()
if err != nil {
fmt.Println(“Hata:”, err)
return
}
// Sınırın kontrol edilmesi
if requestCount > 10 {
fmt.Println(“Hız sınırlaması uygulandı!”)
return
}
// İsteğin işlenmesi
fmt.Println(“İstek başarıyla işlendi!”)
}
“`
Bu örnek kodda, bir kullanıcı için “user:123:request_count” anahtarında istek sayısını tutan bir Redis anahtarı oluşturuyoruz. Her istekte, bu anahtara ait değer artırılıyor. Eğer değer 10’u aşarsa, “Hız sınırlaması uygulandı!” mesajı ekrana yazdırılıyor ve istek reddediliyor.
Hız Sınırlama Stratejileri
Hız sınırlama stratejileri, uygulamanızın gereksinimlerine göre değişebilir. Bazı yaygın stratejiler şunlardır:
- Sabit pencere: Belirli bir zaman dilimi boyunca izin verilen istek sayısını sınırlar. Örneğin, 1 dakika içinde 10 istek.
- Kayan pencere: Belirli bir zaman dilimi içindeki istekleri izler ve belirli bir süre içindeki istek sayısına göre sınırlar. Örneğin, son 10 saniye içinde 5 istek.
- Token kovası: Belirli bir süre içinde doldurulan bir token kovası kullanarak, istekleri belirli bir hızla işlemeye izin verir.
Sonuç
Redis ile hız sınırlama, Golang API’nizin güvenliğini sağlamak için olmazsa olmaz bir uygulamadır. Hız sınırlama stratejileri, uygulamanızın gereksinimlerine göre değişebilir. Bu makale, Redis ile hız sınırlama konusunda size temel bir anlayış kazandırmayı amaçlamıştır. Daha fazla bilgi edinmek için Redis ve Golang kaynaklarını inceleyebilirsiniz.
Hız sınırlama, güvenlik ve performans için önemlidir. API’nizin güvenli ve verimli çalışmasını sağlamak için bu teknikleri kullanmayı düşünün. Daha fazla bilgi ve uygulama örneği için kendi web sitemi Fatih Soysal ziyaret edebilirsiniz.
#Etiketler
Hız Sınırlama, Golang API, Redis, Güvenlik, Performans, Uygulama, API, Token Kovası, Kayan Pencere, Sabit Pencere
