Data intiAPI

Pembatasan Laju

Batas laju atomik di sisi server. GCRA dalam satu perintah, atau limiter bernama dengan sliding window, token bucket, atau leaky bucket. Tanpa Lua.

perintah atomik per permintaan
1
algoritma
4
skrip Lua
0
Langkah 1 dari 5
Diizinkan

10 permintaan per menit untuk pengguna 42. Balasan menyatakan diizinkan, batasnya, dan berapa yang tersisa.

Sesi contohplaying
# Diizinkan
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

Panduan beranimasi dengan perintah HotKV yang sebenarnya dan balasan contoh. Klik langkah mana pun untuk melompat ke sana. Perintah dan balasan tetap dalam bahasa Inggris, persis seperti yang Anda ketik dan lihat di HotKV.

Masalahnya

API tanpa batas hanya berjarak satu klien yang berperilaku buruk dari gangguan layanan. Melakukan pemeriksaan di kode aplikasi berarti pembacaan, perhitungan, dan penulisan, dan permintaan bersamaan menyelinap melalui celah di antaranya. Banyak tim akhirnya memelihara skrip Lua hanya untuk membuatnya atomik.

Cara HotKV menanganinya

GCRA.LIMIT memutuskan dan mencatat dalam satu langkah, sehingga klien yang bersamaan tidak dapat sama-sama lolos pada status yang sama, dan batas terisi ulang dengan mulus alih-alih direset pada batas jendela. Untuk batas yang Anda kelola dengan nama, RATELIMIT.CREATE menyiapkan limiter sliding window, token bucket, atau leaky bucket dengan statistik tentang apa yang diizinkan dan ditolaknya.

Langkah demi langkah

Apa yang terjadi, perintah demi perintah

  1. 01

    Diizinkan

    10 permintaan per menit untuk pengguna 42. Balasan menyatakan diizinkan, batasnya, dan berapa yang tersisa.

    GCRA.LIMIT ratelimit:user:42 60000 10
  2. 02

    Burst dari sebuah bot

    Scraper menghabiskan jatah burst-nya dan kemudian diberi tahu berapa lama harus menunggu. Permintaan yang ditolak tidak mengubah apa pun.

    GCRA.LIMIT ratelimit:bot:7 60000 10
  3. 03

    Limiter bernama untuk sebuah paket

    Pelanggan paket gratis mendapat 100 permintaan semenit pada sliding window.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Permintaan berbobot

    Endpoint ekspor berharga 20 unit, jadi ia memakai lebih banyak jatah.

    RATELIMIT.CHECK free_plan customer:881 COST 20
  5. 05

    Lihat apa yang dilakukan limiter

    Pengaturan, kunci yang dilacak, dan total permintaan yang diizinkan dan ditolak.

    RATELIMIT.STATS free_plan
Di mana ini cocok

Skenario dunia nyata

API publik

Setiap kunci API mendapat batas per paket, dengan burst untuk klien yang berperilaku baik dan Retry-After yang tepat untuk yang lain.

Formulir login dan pendaftaran

Percobaan per IP dan per akun dibatasi untuk memperlambat credential stuffing.

Panggilan keluar

Panggilan ke API mitra atau penyedia LLM dijaga di bawah kuota mereka di setiap worker dalam armada.

Bawaan

Yang Anda dapatkan

GCRA dalam satu perintah

Pengisian ulang mulus dengan burst, pemeriksaan dan pembaruan atomik, waktu coba lagi saat ditolak.

GCRA.LIMITGCRA.RESET

Limiter bernama

Sliding window, token bucket, atau leaky bucket, dibuat sekali dan diperiksa per kunci.

RATELIMIT.CREATERATELIMIT.CHECK

Permintaan berbobot

Panggilan mahal dapat dihitung sebagai beberapa permintaan. GCRA.LIMIT menerima hitungan, RATELIMIT.CHECK menerima COST.

COST

Statistik

Total diizinkan dan ditolak per limiter.

RATELIMIT.STATS

Pertanyaan umum

Apakah saya memerlukan skrip Lua untuk pembatasan laju?

Tidak. Baik GCRA.LIMIT maupun RATELIMIT.CHECK melakukan seluruh pemeriksaan sebagai satu perintah atomik.

Mana yang sebaiknya saya pakai?

GCRA.LIMIT tidak memerlukan penyiapan dan bekerja di setiap paket. Limiter bernama RATELIMIT.* menambahkan pilihan algoritma dan statistik, dan merupakan bagian dari paket Performance dan Scale.

Berapa biaya permintaan yang ditolak?

Tidak ada. Panggilan GCRA yang ditolak membiarkan limiter tidak berubah, sehingga klien yang mencoba lagi tidak dihukum lebih lanjut.

Kasus penggunaan terkait

Coba pada beban kerja Anda sendiri

HotKV berbicara protokol Redis, jadi Anda dapat mengarahkan klien yang sudah ada ke HotKV dan menjalankan perintah yang sama.