Rate Limiting
- Türkçe karşılığı
- hız sınırlama, istek sınırlama
- Okunuşu
- reyt limiting
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Rate limiting, istemcinin belli bir sürede yapabileceği istek sayısını sınırlayıp sunucuyu ya da API'yi kötüye kullanımdan ve aşırı yükten koruyan tekniktir.
Rate limiting nedir?
Rate limiting, bir servisin ne sıklıkla çağrılabileceğini denetler. API anahtarı başına dakikada 100 istek ya da IP adresi başına dakikada 5 giriş denemesi gibi bir kural her istekte kontrol edilir; bir istemci sınırı aştığında, zaman aralığı sıfırlanana kadar sonraki istekler reddedilir. Web'de sunucu genellikle 429 Too Many Requests HTTP durum koduyla yanıt verir.
Kuyruk ne kadar uzarsa uzasın dakikada yalnızca belirli sayıda kişiyi içeri alan bir kulüp görevlisi gibi çalışır. Rate limit'ler sunucuları trafik artışlarından, döngüye girmiş hatalı istemcilerden, agresif veri kazımadan (scraping) ve kaba kuvvetle parola tahmininden korur; ayrıca kapasitenin müşteriler arasında adil paylaşılmasına yardımcı olur. API gateway'lerde, reverse proxy'lerde, CDN'lerde veya uygulama içindeki middleware'de uygulanır; her sunucu aynı sayıyı görsün diye sayaçlar çoğunlukla Redis gibi hızlı, paylaşılan bir depoda tutulur.
Yaygın algoritmalar şunlardır: istekleri takvim dakikası başına sayan sabit pencere (fixed window); son 60 saniyedeki istekleri sayan kayan pencere (sliding window); ve her istemcinin sabit bir hızla token dolan bir kovasının olduğu, her isteğin bir token harcadığı token bucket. Token bucket, ortalama hızı korurken kısa ani artışlara izin verdiği için popülerdir.
Rate limiting, throttling ile yakından ilişkilidir ve iki terim sıklıkla birbirinin yerine kullanılır; ancak throttling bazen istekleri reddetmek yerine yavaşlatmak ya da kuyruğa almak anlamına gelir. Özenli API'ler sınırlarını istemcilere Retry-After veya X-RateLimit-Remaining gibi yanıt başlıklarıyla bildirir; özenli istemciler de 429 aldıklarında bekleyip üstel geri çekilme (exponential backoff) ile yeniden dener, yani her başarısız denemeden sonra daha uzun bekler.
Bir bakışta
Önemli noktalar
- Rate limiting, bir istemcinin belirli bir sürede yapabileceği istek sayısını sınırlar.
- Sınırı aşan istemciler genellikle HTTP
429 Too Many Requestsalır. - Sınırlar tipik olarak API anahtarı, kullanıcı veya IP adresi başına uygulanır.
- Yaygın algoritmalar sabit pencere, kayan pencere ve token bucket'tır.
- İstemciler
Retry-Afterbaşlığına uymalı ve exponential backoff ile yeniden denemelidir.
Örnek
// Fixed-window limiter: 100 requests per minute per IP (in memory, one server)
const LIMIT = 100;
const WINDOW_MS = 60_000;
const hits = new Map(); // ip -> { count, start }
function rateLimit(req, res, next) {
const now = Date.now();
let entry = hits.get(req.ip);
if (!entry || now - entry.start >= WINDOW_MS) {
entry = { count: 0, start: now }; // start a new window
hits.set(req.ip, entry);
}
if (++entry.count > LIMIT) return res.status(429).send("Too Many Requests");
next();
}Sık sorulan sorular
HTTP 429 Too Many Requests ne anlama gelir?
Sunucunun belirli bir sürede izin verdiğinden daha fazla istek gönderdiğiniz anlamına gelir. Yeniden denemeden önce bekleyin; yanıt Retry-After başlığı içeriyorsa ideal olarak orada belirtilen saniye kadar.
Rate limiting ile throttling arasındaki fark nedir?
Sıklıkla eş anlamlı kullanılırlar. Bir ayrım yapıldığında rate limiting sınırı aşan istekleri reddeder; throttling ise onları yavaşlatır ya da kuyruğa alır, böylece istekler kontrollü bir hızda işlenir.
Token bucket algoritması nedir?
Her istemciye sabit bir hızla token dolan bir kova verilir ve her istek bir token harcar. Kova boşaldığında istekler reddedilir; böylece kısa ani artışlara izin verilirken ortalama hız sınırın altında kalır.
İlgili sayfalar
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- API GatewayBackend ve API'ler, s. 3API gateway, bir grup backend servisinin önünde duran ve API isteklerini alan, kontrol eden ve yönlendiren tek giriş noktası görevi gören bir sunucudur.
- MiddlewareBackend ve API'ler, s. 29Middleware, bir sistemin iki katmanı arasında duran yazılımdır; bir web sunucusunda çoğunlukla gelen istek ile son yanıt arasında çalışan koddur.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- Yük DengeleyiciDevOps ve Bulut, s. 54Yük dengeleyici, gelen trafiği birkaç arka uç sunucuya dağıtan bir sunucu ya da hizmettir; hiçbir sunucu aşırı yüklenmez ve uygulama erişilebilir kalır.
- API AnahtarıGüvenlik, s. 2API anahtarı, API çağrılarında uygulamayı veya projeyi tanımlayan, erişim denetimi, kullanım takibi ve hız sınırı için kullanılan benzersiz gizli bir dizedir.
- ThrottlingWeb Geliştirme, s. 48Throttling, bir fonksiyonu ne kadar sık çağrılırsa çağrılsın aralık başına en fazla bir kez çalıştırır; böylece kaydırma işleyicileri düzenli güncellenir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin