API altyapınız için en doğru hız sınırlama (rate limit) algoritmasını belirleyin. Token Bucket, Leaky Bucket, Fixed Window ve Sliding Window mimarilerinin Redis RAM tüketimini, sınır patlaması (boundary burst) riskini ve sunucu IOPS yükünü hesaplayın.
Token Bucket, Leaky Bucket, Fixed Window ve Sliding Window algoritmalarının Redis RAM ihtiyacını, IOPS yükünü ve sınır patlaması (boundary burst) açığını hesaplayın.
Stripe, GitHub ve AWS tarafından tercih edilen Token Bucket; kullanıcıların kısa süreli ani trafik artışlarına (burst) izin verirken sistemin ortalama kapasiteyi aşmasını güvenle engeller. Tek bir Redis Lua scripti ile atomik çalışır.
Token Bucket kovadaki jetonlar bitene kadar ani trafik patlamalarına (burst) izin verir. Kullanıcı aniden 10 isteği aynı anda gönderirse ve kovada 10 token varsa hepsi anında kabul edilir.
Leaky Bucket ise bir tampon kuyruktur (FIFO queue). Ani gelen 10 isteği sıraya sokar ve saniyede 1 istek gibi sabit bir hızla dışarı sızdırır. Kuyruk dolarsa yeni gelen istekler HTTP 429 ile doğrudan düşürülür (Trafik Şekillendirme).
Dağıtık bir mimaride birden fazla API sunucusu aynı anda kullanıcının tokenını kontrol ettiğinde yarış durumu (race condition) oluşabilir.
Redis Lua Scripting özelliği, kontrol etme ve düşürme (check-and-decrement) adımlarını Redis sunucusunda tek bir atomik işlem olarak yürütür. Böylece kilitlenmeler ve çift harcama açıkları tamamen ortadan kalkar.
X-RateLimit-Limitİstemcinin belirli bir zaman penceresinde yapabileceği maksimum izin verilen istek sayısı.
X-RateLimit-RemainingMevcut zaman penceresinde istemcinin geriye kalan kullanabileceği istek kredisi.
Retry-Afterİstemci HTTP 429 aldığında yeni bir istek göndermek için beklemesi gereken saniye süresi.