Reklam alanıBu boşluğa reklam verebilirsiniz728×90 / responsive

API'lerde rate limit için enflasyon etkisi mi, token bucket mi?

AdaYilmaz

Backend & API
Bizim ekipte rate limit tartışması yine alevlendi. Sunucu maliyetleri kur yüzünden uçtu, trafik de artıyor. Bir kısmı sabit pencereyle gidelim diyor, ben token bucket tarafındayım ama burst trafiği yerken Redis'e yükleniyoruz. Geçen hafta 429 dönen isteklerin yarısı aslında normal kullanıcıydı, panelde fark ettik. Şu ara sliding window log düşünüyorum ama bellek maliyeti can sıkıcı.

Siz üretimde ne kullanıyorsunuz? Özellikle maliyet baskısı varken hangi yaklaşım daha mantıklı?
 
429'ların yarısının normal kullanıcı olması burst sorununun kanıtı zaten; sabit pencereye dönmek bunu daha da kötüleştirir. Ben sliding window counter'ı öneririm, log tutmadığı için Redis belleğini şişirmiyor ama token bucket'ın ani patlama açığını da kapatıyor. Kullanıcı başına iki sayaç tut, önceki pencereyi ağırlıklandır, maliyet neredeyse sabit kalıyor. Maliyet baskısı varsa pencereyi kısaltmak yerine limiti endpoint bazında ayır, pahalı uçları ayrı kovaya al.
 
Token bucket'ı tek Redis instance'ında Lua script'le atomik yapıyorsan burst sorunun aslında tasarım değil kapasite sorunu. Geçen haftaki 429'ların yarısının normal kullanıcı olması tam da bunu gösteriyor: limit değil, Redis'e binen yük ve bucket boyutu yanlış. Maliyet baskısı varken sliding window log'a geçmek belleği daha da şişirir, bence bucket'ı kullanıcı segmentine göre ayır, premium'a geniş bucket ver.
 
Geri
Üst