Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.

Cevap

Rate limiting, bir istemcinin belirli sürede yapabileceği istek sayısını sınırlar. Amaç: kötüye kullanımı ve brute force'u önlemek, sistemi aşırı yükten korumak, kullanım planlarını (free/pro) uygulamak.

Algoritmalar

Fixed window: her dakika için bir sayaç. Basit, ama pencere sınırında patlamaya izin verir (00:59'da 100, 01:00'da 100 istek = 1 saniyede 200).

Sliding window log: her isteğin zaman damgası saklanır, son 60 saniyedekiler sayılır. Kesin ama bellek maliyeti yüksek.

Sliding window counter: önceki ve mevcut pencere sayaçlarının ağırlıklı ortalaması. Az bellekle iyi yaklaşım: tahmini = mevcut + onceki * (pencerede kalan oran)

Token bucket: kova sabit hızla token ile dolar (ör. saniyede 10), kapasitesi sınırlıdır (ör. 100). Her istek bir token harcar; token yoksa reddedilir. Kısa patlamalara (burst) izin verirken ortalama hızı sınırlar. AWS ve Stripe gibi birçok API bunu kullanır.

Leaky bucket: istekler kuyruğa girer ve sabit hızla işlenir; çıkışı düzleştirir.

Dağıtık ortamda uygulama

Birden çok sunucu varsa sayaç paylaşılmalıdır; genelde Redis kullanılır. Yarış durumunu önlemek için işlem atomik olmalıdır:

-- Redis Lua: fixed window, atomik
local n = redis.call("INCR", KEYS[1])
if n == 1 then redis.call("EXPIRE", KEYS[1], ARGV[1]) end
return n

API davranışı

  • Limit aşılınca 429 Too Many Requests ve Retry-After başlığı dönün.
  • Kalan kotayı başlıklarla bildirin: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.
  • Anahtarı amaca göre seçin: API key, kullanıcı ID veya IP (login gibi uçlarda IP + kullanıcı adı).
  • Katmanlı uygulayın: API gateway / Nginx seviyesinde kaba limit, uygulamada iş kuralına özel limit.
  1. HTTP 401 ile 403 durum kodları arasındaki fark nedir?KolayAPI TasarımıBackend
  2. JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?OrtaAPI TasarımıBackend
  3. Idempotency nedir? Hangi HTTP metotları idempotent'tir?OrtaAPI TasarımıBackend
  4. OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?ZorAPI TasarımıBackend
  5. gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?OrtaAPI TasarımıBackend
  6. Webhook nedir? Güvenilir ve güvenli bir webhook sistemi nasıl tasarlanır?OrtaAPI TasarımıBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle