Konsep Token Bucket
Batasi laju permintaan
Konsep Token Bucket adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Mengapa Menerapkan Pembatasan Laju
Pembatasan laju membatasi jumlah operasi yang berlangsung dalam satuan waktu. Hal ini melindungi API dari penyalahgunaan, menghormati kuota pihak ketiga, dan menjaga kestabilan sistem saat beban tinggi.
- Mencegah beban berlebih
- Menegakkan penggunaan yang adil
- Mematuhi batas layanan hulu
Model Ember Token
Bayangkan sebuah ember yang menyimpan token. Setiap permintaan harus mengambil satu token agar dapat dilanjutkan. Token diisi ulang dengan laju tetap. Jika ember kosong, permintaan akan menunggu atau ditolak.
Laju dan Lonjakan
Dua parameter menentukan ember token: laju (token yang ditambahkan per detik) dan lonjakan (kapasitas ember). Lonjakan memungkinkan peningkatan singkat di atas laju tetap.
Pengisian Ulang Seiring Waktu
Jika lajunya 5 token per detik, satu token muncul kira-kira setiap 200 milidetik. Ember tidak pernah menyimpan lebih banyak token daripada kapasitas lonjakannya, sehingga kapasitas yang tidak digunakan tidak terakumulasi selamanya.
Mengizinkan Lonjakan
Lonjakan sebesar 10 berarti hingga 10 permintaan dapat dijalankan seketika jika ember penuh. Setelah itu, permintaan dijalankan dengan kecepatan laju tetap. Hal ini menyeimbangkan daya tanggap dan pengendalian.
Pemeriksaan Sederhana Berbasis Waktu
Anda dapat memperkirakan pembatasan laju dengan pewaktu yang mengeluarkan izin pada interval tetap. Setiap permintaan menunggu detak berikutnya.
ticker := time.NewTicker(200 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("request", i)
}Ember Token dibandingkan dengan Ember Bocor
Ember bocor mengalirkan isinya dengan laju konstan dan sepenuhnya meratakan keluaran, sehingga tidak mengizinkan lonjakan. Ember token mengizinkan lonjakan hingga kapasitasnya. Ember token lebih umum digunakan untuk batas API.
Simulasi Ember Minimal
Contoh yang dapat dijalankan ini menyimulasikan ember token berkapasitas 3 yang diisi ulang setiap 100 md, serta menampilkan permintaan mana yang diizinkan.
package main
import (
"fmt"
"time"
)
func main() {
tokens := 3
last := time.Now()
rate := 100 * time.Millisecond
for i := 0; i < 6; i++ {
elapsed := time.Since(last)
refill := int(elapsed / rate)
if refill > 0 {
tokens += refill
if tokens > 3 {
tokens = 3
}
last = time.Now()
}
if tokens > 0 {
tokens--
fmt.Println("request", i, "allowed")
} else {
fmt.Println("request", i, "rejected")
}
time.Sleep(40 * time.Millisecond)
}
}Allow vs Wait vs Reserve
Pembatas biasanya menyediakan tiga perilaku: Allow segera mengembalikan true atau false, Wait memblokir sampai token tersedia, dan Reserve memberi tahu Anda berapa lama harus menunggu. Pilih berdasarkan apakah Anda dapat memblokir.
Di Mana Batas Laju Diterapkan
Batas laju dapat diterapkan per klien, per titik akhir, atau secara global. Peta pembatas yang kuncinya adalah alamat IP klien menerapkan kuota per klien, sedangkan satu pembatas bersama membatasi keseluruhan laju keluaran.
Memilih Parameter
Sesuaikan laju Anda dengan kuota layanan hilir. Jika API mengizinkan 600 permintaan per menit, atur lajunya menjadi 10 per detik. Atur lonjakan untuk menampung peningkatan yang diharapkan tanpa melampaui rata-rata.
Pemeriksaan Singkat
Uji pemahaman Anda tentang ember token.
Ringkasan
Anda telah mempelajari konsep ember token:
- Token digunakan untuk setiap permintaan dan diisi ulang dengan suatu laju
- Lonjakan adalah kapasitas ember untuk menghadapi peningkatan
- Ember token mengizinkan lonjakan; ember bocor tidak
- Allow, Wait, dan Reserve adalah API yang umum digunakan
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Konsep Token Bucket” gratis?
Ya — teks lengkap “Konsep Token Bucket” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Konsep Token Bucket”?
Batasi laju permintaan Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Konsep Token Bucket” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Konsep Token Bucket
- golang.org/x/time/rate
- Throttling Goroutine
- Backoff dan Percobaan Ulang