⚡ÖZET VE TEKNİK CEVAP
Çok sunuculu bir API ağ geçidi filosunda (ör. 20 Go veya Envoy sunucusu) hız sınırlama yerel sunucu hafızasında yapılamaz; çünkü kötü niyetli bir kullanıcı istekleri 20 sunucuya dağıtarak 100 istek/sn limitini 20 kat delip 2.000 istek atabilir. Ayrı ayrı Redis GET ve SET komutları atan acemi çözümler ise Yarış Durumu (Race Condition) tuzağına düşer: Aynı anda gelen 10 istek Redis'teki sayacı 99 okur ve hepsi onay vererek limiti deler. Endüstri standardı çözüm, Token Bucket veya Kayan Pencere (Sliding Window) algoritmasını Atomik bir Redis Lua Betiği içinde çalıştırmaktır: Okuma, jeton doldurma, kontrol ve yazma döngüsü Redis'in tek iş parçacıklı motorunda <0,5 ms'de atomik bir bütün olarak çalışır ve devasa yük altında bile %100 kesinlik sağlar.
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
Bir SaaS şirketinin arama API'si, istekleri 50 ağ geçidi sunucusuna dağıtarak yerel limitleri delen ve saniyede 15.000 istek basan botlar yüzünden kilitleniyordu. Ekip Redis Kümesi üzerinde 20 satırlık atomik Token Bucket Lua betiği ve Fail-Open devre kesicisi kurdu. Redis saniyede 80.000 kontrolü istek başına 0,3 ms'de işledi; kötü niyetli botlar HTTP 429 ile engellendi ve arka plan arama veritabanı CPU yükü %78 azaldı.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaDağıtık Redis hız sınırlamada neden atomik bir Lua betiği kullanmak şarttır?
Bir istemci hız sınırına takıldığında hangi HTTP durum kodu ve başlıklar dönülmelidir?
Dağıtık Hız Sınırlama (Rate Limiting): Atomik Redis Lua Token Bucket ve Kayan Pencereler — Sıkça Sorulan Sorular
Hız sınırlamada 'Fail-Open' ile 'Fail-Closed' arasındaki fark nedir?
Fail-Open, hız sınırlayıcı (Redis) çöktüğünde trafiği geçirerek sistemin erişilebilirliğini korur; Fail-Closed ise trafiği keserek arka plan güvenliğini korur.
Token Bucket algoritması Sabit Pencere (Fixed Window) sayaçlarına göre neden üstündür?
Sabit Pencere sayaçları pencere sınırlarında (ör. 00:59'da 100 ve 01:00'da 100 istek) izin verilenin 2 katı trafiğin geçmesine izin verir; Token Bucket ise pürüzsüz ve sürekli bir hız sınırı uygular.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
Distributed rate limiting requires central coordination to prevent multi-node over-admission.
- ▸
Separate Redis GET/SET operations cause race conditions that break rate limits.
- ▸
Atomic Redis Lua scripts execute token bucket refill-and-consume cycles in <0.5ms.
- ▸
Return HTTP 429 with
Retry-Afterheaders and configure Fail-Open fallback resilience.
Yaygın Yanılgılar
- ✗
Yanılgı: Rate limiting in local server memory is sufficient for microservices (Gerçek: Traffic spreads across pods, easily multiplying the allowed quota).
- ✗
Yanılgı: Sliding window sorted sets (ZSET) scale indefinitely (Gerçek: High request volumes cause massive Redis memory and CPU exhaustion; Token Bucket is O(1)).
Karar Kılavuzu & Önceliklendirme
Deploy the Redis Lua Token Bucket pattern for public-facing API rate limiting. Implement client-side exponential backoff respecting the Retry-After response header.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]Scaling Your API with Rate Limiters: Token Bucket & Redis Architecture— Paul Tarjan / Stripe Engineering Blog
