GoDasturchi
Rate Limiting: The Token Bucket Idea

Rate Limiting: The Token Bucket Idea

Rate limiting: token bucket g'oyasi

Har qanday production backend so'rovlarni cheklashi kerak — aks holda bitta foydalanuvchi (yoki bug'li klient) butun serverni ortiqcha yuklab qo'yishi mumkin. Rate limitingning eng mashhur algoritmi — token bucket (token savati): har bir klient uchun cheklangan sig'imli "savat" bo'ladi, har bir so'rov bitta tokenni sarflaydi, va token qolmasa so'rov rad etiladi.

example.go
type TokenBucket struct {
    capacity int
    tokens   int
}

func (b *TokenBucket) Allow() bool {
    if b.tokens <= 0 {
        return false
    }
    b.tokens--
    return true
}

Bu — Pointers & Memory kursidagi joyida o'zgartirish g'oyasining davomi: Allow pointer receiver orqali b.tokensni kamaytiradi, shuning uchun har bir chaqiruv keyingi chaqiruvga ta'sir qiladi. Keyingi darslarda siz bu savatga vaqt o'tishi bilan tokenlarni qayta to'ldirishni (refill) qo'shasiz — bu butun loyihaning yuragi bo'ladi.

>_ Exercise

capacity int va tokens int maydonlariga ega TokenBucket struct'ini yozing. NewTokenBucket(capacity int) *TokenBucket konstruktorini yozing — u to'liq savatni qaytaradi (tokens boshida capacityga teng). Allow() bool metodini yozing — agar token bo'lsa, uni sarflab true qaytaradi; aks holda false qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Token bucket — rate limitingning eng sodda va tushunarli modeli: cheklangan sig'imli hisoblagich, har bir ruxsat berilgan amal uni kamaytiradi. Allow() bu hisoblagichni tekshirish va kamaytirishni bitta atomik (dastur mantig'i nuqtai nazaridan) qadamda bajaradi.

NEXT UP

Building a Token Bucket: Refilling Tokens

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Rate Limiting: The Token Bucket Idea

Rate limiting: token bucket g'oyasi

Har qanday production backend so'rovlarni cheklashi kerak — aks holda bitta foydalanuvchi (yoki bug'li klient) butun serverni ortiqcha yuklab qo'yishi mumkin. Rate limitingning eng mashhur algoritmi — token bucket (token savati): har bir klient uchun cheklangan sig'imli "savat" bo'ladi, har bir so'rov bitta tokenni sarflaydi, va token qolmasa so'rov rad etiladi.

example.go
type TokenBucket struct {
    capacity int
    tokens   int
}

func (b *TokenBucket) Allow() bool {
    if b.tokens <= 0 {
        return false
    }
    b.tokens--
    return true
}

Bu — Pointers & Memory kursidagi joyida o'zgartirish g'oyasining davomi: Allow pointer receiver orqali b.tokensni kamaytiradi, shuning uchun har bir chaqiruv keyingi chaqiruvga ta'sir qiladi. Keyingi darslarda siz bu savatga vaqt o'tishi bilan tokenlarni qayta to'ldirishni (refill) qo'shasiz — bu butun loyihaning yuragi bo'ladi.

>_ Exercise

capacity int va tokens int maydonlariga ega TokenBucket struct'ini yozing. NewTokenBucket(capacity int) *TokenBucket konstruktorini yozing — u to'liq savatni qaytaradi (tokens boshida capacityga teng). Allow() bool metodini yozing — agar token bo'lsa, uni sarflab true qaytaradi; aks holda false qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Token bucket — rate limitingning eng sodda va tushunarli modeli: cheklangan sig'imli hisoblagich, har bir ruxsat berilgan amal uni kamaytiradi. Allow() bu hisoblagichni tekshirish va kamaytirishni bitta atomik (dastur mantig'i nuqtai nazaridan) qadamda bajaradi.

NEXT UP

Building a Token Bucket: Refilling Tokens