Rate limiter
- Kotlin kursu
- İleri seviye
- Ders 70/83
- 5 dk
Rate limiter deseni öğrenirsin.
Rate limiter
Bir rate limiter, bir işlemi belirli bir oranda sınırlar. En basit biçimi, bir sayaç ile belli sayıda isteğe izin verir; sonraki istekleri reddeder.
Örnek: class RateLimiter(val max: Int) { var count = 0; fun tryAcquire(): Boolean { if (count >= max) return false; count++; return true } }. tryAcquire her çağrıda sayaç artar; max'a ulaşınca false döner. Bu kalıp, API kotaları ve Flood koruması için kullanılır.
tryAcquire ve sayaç
tryAcquire bir permit ister; sayaç max'tan küçükse true döner ve sayaç artar. Aksi halde false döner; istek reddedilir.
Örnek: val rl = RateLimiter(2). rl.tryAcquire() iki kez true döner; üçüncü çağrıda false verir. Bu kalıp, eşzamanlı olarak paylaşılan bir kaynağı korumak için Mutex ile birleştirilebilir.
Uygulama RateLimiter sınıfını yaz
class RateLimiter(val max: Int) tanımla; var count = 0 ve fun tryAcquire(): Boolean metodu olsun. Metot, count max'tan küçükse true döndürüp count'u artırsın; değilse false döndürsün. main içinde RateLimiter(2) ile üç tryAcquire çağrısının sonuçlarını println ile yazdır.
Başlangıç kodu
// RateLimiter sınıfı: max ve count
// tryAcquire: count<max ise true, değilse false
// main'de üç çağrı sonucunu yazdırÖrnek çözüm
class RateLimiter(val max: Int) {
var count = 0
fun tryAcquire(): Boolean {
if (count >= max) return false
count++
return true
}
}
fun main() {
val rl = RateLimiter(2)
println(rl.tryAcquire())
println(rl.tryAcquire())
println(rl.tryAcquire())
}Beklenen çıktı
true true false
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir rate limiter'ın temel amacı nedir?
- İstek sayısını sınırlamak Doğru cevap
- Veriyi sıkıştırmak
- Cache'lemek
- Hızı artırmak
Açıklama: Rate limiter istek sayısını sınırlar.
2 Rate limiter parçalarını eşle
| Kavram | Anlamı |
|---|---|
class RateLimiter |
Sınıf tanımı |
max |
İzin sınırı |
tryAcquire() |
Permit iste |
count >= max |
Ret koşulu |
3 tryAcquire çağrısını tamamla
val rl = RateLimiter(2)
val ok = rl.____()
val rl = RateLimiter(2)
val ok = rl.tryAcquire()
Açıklama: tryAcquire bir permit ister.