Go Academy · Ders

golang.org/x/time/rate

Hız sınırlayıcıyı kullanın

2. ders / 413 adım

golang.org/x/time/rate, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

rate Paketi

golang.org/x/time/rate, üretimde kullanıma hazır bir belirteç kovası Limiter sağlar. Go'da hız sınırlama için standart tercihtir.

  • Sahada kanıtlanmış uygulama
  • Allow, Wait ve Reserve yöntemleri
  • Bağlam duyarlı

Limiter Oluşturma

rate.NewLimiter, bir hız (saniyede belirteç sayısı) ve bir ani artış boyutu alır. rate.Limit, saniyedeki olay sayısını belirten bir float64 değeridir.

limiter := rate.NewLimiter(rate.Limit(10), 5)

rate.Every

Saniyelik hızlar yerine aralıklarla düşünüyorsanız rate.Every, bir süreyi hıza dönüştürür. Her 200 ms'de bir olay, saniyede beş olaya eşittir.

limiter := rate.NewLimiter(rate.Every(200*time.Millisecond), 1)

Allow

Allow, şu anda bir belirtecin kullanılabilir olup olmadığını bildirir. Doğru döndürüp bir belirteç tüketir veya hemen yanlış döndürür. Fazla istekleri reddetmek için kullanın.

if !limiter.Allow() {
    fmt.Println("rejected: too many requests")
    return
}

Wait

Wait, bir belirteç kullanılabilir olana veya bağlam iptal edilene kadar engeller. İşi düşürmek yerine hızını düzenlemek istediğinizde idealdir.

if err := limiter.Wait(ctx); err != nil {
    return err
}
doWork()

Reserve

Reserve, ne kadar beklenmesi gerektiğini açıklayan bir Reservation döndürür. Bekleme süresini öğrenmek için Delay() çağrısını yapın; devam etmemeye karar verirseniz Cancel() çağrısını yapın.

r := limiter.Reserve()
if !r.OK() {
    return
}
time.Sleep(r.Delay())

Not: Harici Paket

rate paketi standart kitaplıkta bulunmadığından go get golang.org/x/time/rate ve bir modül gerekir. Bu paketi içe aktaran kod parçaları açıklama amaçlıdır ve burada satır içinde çalıştırılmaz.

Çalıştırılabilir Standart Kitaplık Benzeri

rate paketi harici olduğundan, burada her 200 ms'de bir vuruş göndererek Wait davranışını taklit eden standart kitaplıkla yazılmış bir hız düzenleme döngüsü bulunmaktadır.

package main

import (
    "fmt"
    "time"
)

func main() {
    tick := time.NewTicker(200 * time.Millisecond)
    defer tick.Stop()
    for i := 0; i < 4; i++ {
        <-tick.C
        fmt.Println("processed event", i)
    }
}

Çalışma Zamanında Ayarlama

SetLimit ve SetBurst ile sınırları çalışma sırasında değiştirebilirsiniz. Bir yapılandırma yeniden yüklemesi veya yukarı akıştan gelen bir 429 yanıtı yavaşlamanızı söylediğinde bu kullanışlıdır.

limiter.SetLimit(rate.Limit(20))
limiter.SetBurst(10)

İstemci başına hız sınırlayıcıları

İstemci anahtarından *rate.Limiter değerine bir eşleme tutun ve bunu bir kilitle koruyun. Bu anahtara yönelik ilk istekte bir sınırlayıcı oluşturun, sonraki isteklerde ise yeniden kullanın.

func getLimiter(m map[string]*rate.Limiter, key string) *rate.Limiter {
    if l, ok := m[key]; ok {
        return l
    }
    l := rate.NewLimiter(rate.Limit(5), 10)
    m[key] = l
    return l
}

HTTP ara yazılımı

İşleyicileri, her isteğin önce Allow() çağıracağı şekilde sarın. Sonuç false olduğunda HTTP 429 Çok Fazla İstek yanıtı verin. Bu, sunucu tarafındaki standart hız sınırlamasıdır.

Hızlı Kontrol

Hız paketi bilginizi sınayın.

Özet

golang.org/x/time/rate paketini öğrendiniz:

  • NewLimiter(rate, burst) kovayı oluşturur
  • rate.Every bir aralığı hıza dönüştürür
  • Allow reddeder, Wait hızı düzenler, Reserve gecikmeyi bildirir
  • SetLimit ve SetBurst çalışma zamanında ayarlanabilir
  • Sunucular için istemci başına eşleme ve HTTP 429
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“golang.org/x/time/rate” dersi ücretsiz mi?

Evet — “golang.org/x/time/rate” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“golang.org/x/time/rate” dersinde ne öğreneceğim?

Hız sınırlayıcıyı kullanın Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“golang.org/x/time/rate” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Belirteç Kovası Kavramı
  2. golang.org/x/time/rate
  3. Goroutine'leri Kısıtlama
  4. Geri Çekilme ve Yeniden Deneme
← Go Academy Sayfasına Dön