Rate Limit, Throttling ve Quota Management'a Kapsamlı Bir Bakış
API geliştirme ve yönetiminin dinamik dünyasında, gelen isteklerin akışını kontrol etmek sistem stabilitesini korumak, adil kullanımı sağlamak ve kötüye kullanımı önlemek için çok önemlidir.
Apinizer, gelişmiş rate limit, throttling ve quota management özellikleri sayesinde bu zorluklara kolay kullanışlı ve yüksek performanslı çözümler sunar.
Bu yazımızda, bu temel kavramları inceleyerek Apinizer'daki uygulamalarını anlatacağız.
Rate Limit ve Throttling
Rate limit ve throttling genellikle birbirinin yerine kullanılır ve her ikisi de API'ye gelen isteklerin hızını kontrol etme sürecine atıfta bulunur.
Zaman Ölçeği: Genellikle saniye veya dakika cinsinden ölçülür.
Örnekler:
- Saniyede 100 istek
- Dakikada 1000 istek
Uygulama: Apinizer, ilgili kural hesaplamalarını yapabilmek sonuçlarını tutabilmek ve farklı sistemler arasında dağıtabilmek için Distributed Cache kullanır.
Veri Depolama: Sadece önbelleğe dayanır. Bu, verilerin geçici olduğu ve sistem yeniden başlatıldığında kaybolabileceği anlamına gelir; kısa vadeli sınırlar için bu kabul edilebilirdir.
Kullanım Alanları:
- Ani trafik artışlarına karşı API'leri korumak
- Kısa zaman dilimlerinde birden fazla müşteri arasında adil kullanım sağlamak
- Kötüye kullanım veya DoS saldırılarını önlemek
Kota Yönetimi
Kota yönetimi, benzer amaçlarla çalışsa da, farklı bir ölçek ve hedefle çalışır.
Zaman Ölçeği: Genellikle saat, gün veya ay olarak ölçülür.
Örnekler:
- Günde 10.000 istek
- Aylık 1.000.000 istek
Uygulama: Hızlı erişim ve gerçek zamanlı güncellemeler için cache, kalıcı uzun vadeli depolama için veritabanı kombinasyonu kullanır.
Veri Depolama:
- Cache: Gerçek zamanlı kota kontrolleri için birincil kaynak, her API çağrısı ile eşzamanlı olarak güncellenir.
- Veritabanı: İkincil, kalıcı depolama için veri tabanı kullanılır. API yanıt süresini azaltmak için asenkron olarak güncellenir, sistem yeniden başlatıldığında veya önbellek hatası durumunda veri kalıcılığı sağlar.
Kullanım Alanları:
- İş düzeyinde API kullanım limitlerini zorunlu kılmak
- API tüketimi için faturalandırma ve muhasebe
- Uzun vadeli kullanım analizi ve planlaması
Throttling ve Kota Yönetimi İş Akışı
API kullanım kotalarını izlemek ve yönetmek için çok katmanlı bir yaklaşım kullanır. Bu sistem dört temel bileşen üzerinden çalışır: Client (İstemci), API Gateway, Distributed Cache (Dağıtık Önbellek) ve Database (Veritabanı).
İşlem akışı şu şekilde gerçekleşir:
-
İlk İstek Kontrolü: Client'tan gelen her API isteği öncelikle API Gateway üzerinden geçer. Gateway, isteğin kotaya uygunluğunu kontrol etmek için hızlı bir şekilde Distributed Cache'e başvurur.
-
Önbellek Katmanı: Distributed Cache, kota bilgilerini yüksek performanslı ve düşük gecikmeli bir şekilde tutar. Bu katman, sistemin hızlı yanıt vermesini sağlayan kritik bir bileşendir. Cache'den gelen güncel kota durumu, API Gateway tarafından değerlendirilir.
-
Karar Mekanizması: API Gateway, cache'den aldığı bilgiler doğrultusunda iki farklı yol izler:
- Başarılı Senaryo: Eğer kota limiti aşılmamışsa, istek işlenir ve client'a başarılı yanıt döner. Ardından, kota sayacı güncellenir.
- Başarısız Senaryo: Kota aşılmışsa, istek reddedilir ve client'a uygun bir hata mesajı gönderilir.
-
Veri Senkronizasyonu: Başarılı işlemlerde, kota bilgileri iki aşamada güncellenir:
- Öncelikle Distributed Cache hızlıca güncellenir (senkron)
- Ardından veritabanı güncellemesi asenkron olarak gerçekleştirilir
-
Dayanıklılık ve Tutarlılık: Veritabanı, uzun vadeli kota takibi ve sistem yeniden başlatmaları durumunda veri sürekliliğini sağlar. Asenkron güncelleme yaklaşımı, API performansını etkilemeden veri dayanıklılığını garanti eder.
Bu akış, yüksek performans ve veri tutarlılığı arasında optimal bir denge kurar. Cache kullanımı hızlı yanıt sürelerini sağlarken, veritabanı desteği veri kalıcılığını garanti eder. Asenkron veritabanı güncellemeleri ise sistem performansını korurken güvenilir bir kota takibi sunar.
Bu akışı özetleyen görsele aşağıda yer verilmiştir:

Kritik "Interval Window Type" Parametresi
Hem throttling hem de kota yönetiminin iş mantığının merkezinde Interval Window Type parametresi bulunur.
Bu parametre, isteklerin sayıldığı zaman penceresinin nasıl yönetileceğini ve güncelleneceğini belirler.
Olası Değerler
- Sabit Pencere
- Kayan Pencere

Sabit Pencere
Sabit Pencere yaklaşımında, zaman sabit, çakışmayan periyotlara bölünür.
Davranış:
- Belirli bir periyot içindeki tüm istekler birlikte sayılır.
- Sayaç, her yeni periyot başladığında sıfırlanır.
- Önbellek girdisinin TTL (Yaşam Süresi), mevcut periyottaki kalan süre olarak ayarlanır.
Örnek:
- Eğer periyot 1 dakika olarak ayarlanmışsa ve 12:00:00'da başlıyorsa:
- 12:00:00 ile 12:00:59 arasındaki istekler aynı pencerede sayılır.
- 12:01:00'da yeni bir pencere başlar ve sayaç sıfırlanır.
Kayan Pencere
Kayan Pencere yaklaşımında, her istek kendi zaman penceresini başlatır.
Davranış:
- Pencere, her yeni istekle birlikte "kayar".
- Geçmiş periyot süresindeki tüm istekleri sayar ve sürekli günceller.
- Önbellek girdisinin TTL değeri her zaman tam periyot uzunluğu olarak ayarlanır.
Örnek:
- Eğer periyot 1 dakika olarak ayarlanmışsa:
- 12:00:30'daki bir istek, 11:59:30 ile 12:00:30 arasındaki tüm istekleri sayar.
- 12:00:45'teki bir istek, 11:59:45 ile 12:00:45 arasındaki tüm istekleri sayar.