Bir API için rate limiter nasıl tasarlanır? Hangi algoritmalar kullanılır?

Cevap

Rate limiter, bir istemcinin belirli sürede yapabileceği istek sayısını sınırlar: kötüye kullanımı, brute force'u ve aşırı yükü önler. Limit aşıldığında 429 Too Many Requests ve Retry-After başlığı döner.

Algoritmalar

AlgoritmaMantıkArtı / Eksi
Fixed windowHer dakika için sayaçBasit; pencere sınırında 2 kat patlama olabilir
Sliding window logHer isteğin zaman damgası saklanırKesin; bellek yoğun
Sliding window counterİki pencerenin ağırlıklı ortalamasıİyi denge, yaygın
Token bucketKovaya sabit hızla token eklenir, istek token harcarKısa patlamalara izin verir; çok yaygın
Leaky bucketİstekler kuyruktan sabit hızla çıkarÇıkışı düzleştirir

Dağıtık uygulama

Birden fazla sunucu olduğunda sayaç ortak bir yerde, genelde Redis'te tutulur:

// Fixed window: kullanıcı başına dakikada 100 istek
async function allow(userId) {
  const key = `rl:${userId}:${Math.floor(Date.now() / 60000)}`;
  const count = await redis.incr(key);
  if (count === 1) await redis.expire(key, 60);
  return count <= 100;
}

Token bucket gibi çok adımlı mantıkta yarış durumunu önlemek için işlem Lua script ile atomik yapılır.

Tasarım kararları

  • Anahtar: kullanıcı ID, API key veya IP (girişsiz istekler için).
  • Nerede: API gateway (Nginx, Kong, Cloudflare) veya uygulama middleware'i.
  • Redis erişilemezse: fail-open (izin ver) mi fail-closed mu, kararı açıkça verilmeli.
  • Yanıtta X-RateLimit-Remaining gibi başlıklarla istemciye bilgi verilir.
  1. Dikey ve yatay ölçekleme arasındaki fark nedir?KolaySistem TasarımıFull Stack
  2. Hangi cache stratejilerini biliyorsunuz?OrtaSistem TasarımıFull Stack
  3. REST ile GraphQL arasındaki farklar nelerdir?OrtaSistem TasarımıFull Stack
  4. Bit.ly benzeri bir URL kısaltma servisi tasarlayın.ZorSistem TasarımıFull Stack
  5. Google Docs benzeri gerçek zamanlı ortak düzenleme yüksek seviyede nasıl tasarlanır?ZorSistem TasarımıFull Stack
  6. CDN nedir, nasıl çalışır ve hangi durumlarda kullanılır?KolaySistem TasarımıFull Stack

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