Date de bazăAPI-uri

Limitarea ratei

Limite de rată atomice, pe server. GCRA într-o singură comandă sau limitatoare cu nume, cu fereastră glisantă, token bucket sau leaky bucket. Fără Lua.

comandă atomică pe cerere
1
algoritmi
4
scripturi Lua
0
Pasul 1 din 5
Permis

10 cereri pe minut pentru utilizatorul 42. Răspunsul spune permis, limita și câte au rămas.

Sesiune de exempluplaying
# Permis
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

O demonstrație animată cu comenzi HotKV reale și răspunsuri de exemplu. Faceți clic pe orice pas pentru a sări la el. Comenzile și răspunsurile rămân în engleză, exact așa cum le tastați și le vedeți în HotKV.

Problema

Un API fără limite este la un singur client dezordonat distanță de o cădere. Dacă verificarea se face în codul aplicației, înseamnă o citire, un calcul și o scriere, iar cererile concurente se strecoară prin golurile dintre ele. Multe echipe ajung să întrețină un script Lua doar ca să o facă atomică.

Cum o rezolvă HotKV

GCRA.LIMIT decide și înregistrează într-un singur pas, deci clienții concurenți nu pot trece amândoi pe aceeași stare, iar limita se reface lin, în loc să se reseteze la marginile ferestrei. Pentru limitele pe care le gestionați după nume, RATELIMIT.CREATE configurează un limitator cu fereastră glisantă, token bucket sau leaky bucket, cu statistici despre ce a permis și ce a refuzat.

Pas cu pas

Ce se întâmplă, comandă cu comandă

  1. 01

    Permis

    10 cereri pe minut pentru utilizatorul 42. Răspunsul spune permis, limita și câte au rămas.

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

    O rafală de la un bot

    Botul își consumă alocația de rafală și i se spune apoi cât are de așteptat. O cerere refuzată nu schimbă nimic.

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

    Limitator cu nume pentru un plan

    Clienții din planul gratuit primesc 100 de cereri pe minut pe o fereastră glisantă.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Cerere cu pondere

    Un endpoint de export costă 20 de unități, deci consumă mai mult din alocație.

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

    Vedeți ce a făcut limitatorul

    Setările, cheile urmărite și totalurile cererilor permise și refuzate.

    RATELIMIT.STATS free_plan
Unde se potrivește

Scenarii din lumea reală

API-uri publice

Fiecare cheie API primește o limită pe plan, cu rafale pentru clienții cuminți și un Retry-After precis pentru ceilalți.

Formulare de autentificare și înscriere

Încercările pe IP și pe cont sunt limitate ca să încetinească atacurile de tip credential stuffing.

Apeluri de ieșire

Apelurile către un API partener sau către un furnizor LLM sunt ținute sub cota lor, la nivelul tuturor workerilor din flotă.

Integrat

Ce primiți

GCRA într-o singură comandă

Reîncărcare lină cu rafale, verificare și actualizare atomice, un timp de reîncercare la refuz.

GCRA.LIMITGCRA.RESET

Limitatoare cu nume

Fereastră glisantă, token bucket sau leaky bucket, create o dată și verificate pe cheie.

RATELIMIT.CREATERATELIMIT.CHECK

Cereri cu pondere

Apelurile costisitoare pot conta ca mai multe cereri. GCRA.LIMIT primește un număr, RATELIMIT.CHECK un COST.

COST

Statistici

Totaluri de permise și refuzate pe limitator.

RATELIMIT.STATS

Întrebări frecvente

Am nevoie de un script Lua pentru limitarea ratei?

Nu. Atât GCRA.LIMIT, cât și RATELIMIT.CHECK fac întreaga verificare ca o singură comandă atomică.

Pe care ar trebui să-l folosesc?

GCRA.LIMIT nu cere nicio configurare și funcționează în fiecare plan. Limitatoarele cu nume RATELIMIT.* adaugă o alegere de algoritm și statistici și fac parte din planurile Performance și Scale.

Cât costă o cerere refuzată?

Nimic. Un apel GCRA refuzat lasă limitatorul neschimbat, deci un client care reîncearcă nu este penalizat suplimentar.

Cazuri de utilizare înrudite

Încercați pe propria sarcină de lucru

HotKV vorbește protocolul Redis, așa că puteți îndrepta spre el un client existent și rula aceleași comenzi.