Junior — Middle
Sistemde belirli bir zaman diliminde istek sayısını sınırlama mekanizması nasıl uygulanır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da zaman biriminde istek sayısını sınırlama mekanizması (rate limiting) genellikle token bankaları veya zaman pencereleri ile sayıcılar kullanılarak uygulanır.
golang.org/x/time/rate paketi kullanımı örneği:
import (
"golang.org/x/time/rate"
"net/http"
)
var limiter = rate.NewLimiter(1, 5) // saniyede 1 istek, maksimum 5 token ile
func handler(w http.ResponseWriter, r *http.Request) {
if !limiter.Allow() {
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
return
}
// istek işleme
}
Burada, rate.NewLimiter saniyede 1 isteğe izin veren, ancak 5'e kadar token toplayabilen bir limitör oluşturur, bu da kısa süreli istek patlamalarına izin verir. Çok fazla istek olursa, 429 hatasıyla reddedilir.
Diğer yaklaşımlar arasında sabit pencere, kayan pencere veya Redis kullanımıyla dağıtık rate limiting bulunur.