KerndatenAPIs

Rate Limiting

Atomare, serverseitige Rate Limits. GCRA mit einem Befehl oder benannte Limiter mit Sliding Window, Token Bucket oder Leaky Bucket. Ohne Lua.

atomarer Befehl pro Anfrage
1
Algorithmen
4
Lua-Skripte
0
Schritt 1 von 5
Erlaubt

10 Anfragen pro Minute für Benutzer 42. Die Antwort nennt die Erlaubnis, das Limit und wie viele noch übrig sind.

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

Ein animierter Durchlauf mit echten HotKV-Befehlen und Beispielantworten. Klicken Sie auf einen Schritt, um direkt dorthin zu springen. Befehle und Antworten bleiben auf Englisch, genau so, wie Sie sie in HotKV eingeben und sehen.

Das Problem

Eine API ohne Limits ist nur einen fehlerhaften Client von einem Ausfall entfernt. Die Prüfung im Anwendungscode bedeutet einen Lesezugriff, eine Berechnung und einen Schreibzugriff, und gleichzeitige Anfragen schlüpfen durch die Lücken dazwischen. Viele Teams pflegen am Ende ein Lua-Skript, nur um es atomar zu machen.

So löst HotKV es

GCRA.LIMIT entscheidet und speichert in einem Schritt, sodass gleichzeitige Clients nicht beide auf demselben Stand durchkommen, und das Limit füllt sich gleichmäßig wieder auf, statt an Fenstergrenzen zurückgesetzt zu werden. Für Limits, die Sie nach Namen verwalten, richtet RATELIMIT.CREATE einen Limiter mit Sliding Window, Token Bucket oder Leaky Bucket ein, mit Statistiken darüber, was er erlaubt und abgelehnt hat.

Schritt für Schritt

Was passiert, Befehl für Befehl

  1. 01

    Erlaubt

    10 Anfragen pro Minute für Benutzer 42. Die Antwort nennt die Erlaubnis, das Limit und wie viele noch übrig sind.

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

    Ein Burst von einem Bot

    Der Scraper verbraucht sein Burst-Kontingent und erfährt dann, wie lange er warten muss. Eine abgelehnte Anfrage ändert nichts.

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

    Benannter Limiter für einen Tarif

    Kunden im kostenlosen Tarif bekommen 100 Anfragen pro Minute in einem Sliding Window.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Gewichtete Anfrage

    Ein Export-Endpunkt kostet 20 Einheiten und verbraucht daher mehr vom Kontingent.

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

    Sehen, was der Limiter getan hat

    Einstellungen, erfasste Keys und die Summen erlaubter und abgelehnter Anfragen.

    RATELIMIT.STATS free_plan
Wo es passt

Szenarien aus der Praxis

Öffentliche APIs

Jeder API-Schlüssel bekommt ein Limit pro Tarif, mit Bursts für gut erzogene Clients und einem präzisen Retry-After für den Rest.

Anmelde- und Registrierungsformulare

Versuche pro IP und pro Konto werden begrenzt, um Credential Stuffing auszubremsen.

Ausgehende Aufrufe

Aufrufe an eine Partner-API oder einen LLM-Anbieter bleiben über jeden Worker der Flotte hinweg unter deren Kontingent.

Integriert

Was Sie bekommen

GCRA mit einem Befehl

Gleichmäßiges Auffüllen mit Bursts, atomare Prüfung und Aktualisierung, eine Wartezeit bei Ablehnung.

GCRA.LIMITGCRA.RESET

Benannte Limiter

Sliding Window, Token Bucket oder Leaky Bucket, einmal angelegt und pro Key geprüft.

RATELIMIT.CREATERATELIMIT.CHECK

Gewichtete Anfragen

Teure Aufrufe können als mehrere Anfragen zählen. GCRA.LIMIT nimmt eine Anzahl, RATELIMIT.CHECK einen COST.

COST

Statistiken

Summen erlaubter und abgelehnter Anfragen pro Limiter.

RATELIMIT.STATS

Häufige Fragen

Brauche ich für Rate Limiting ein Lua-Skript?

Nein. Sowohl GCRA.LIMIT als auch RATELIMIT.CHECK führen die gesamte Prüfung als einen atomaren Befehl aus.

Was sollte ich verwenden?

GCRA.LIMIT braucht keine Einrichtung und funktioniert in jedem Tarif. Die benannten Limiter von RATELIMIT.* bieten zusätzlich die Wahl des Algorithmus und Statistiken und sind Teil der Tarife Performance und Scale.

Was kostet eine abgelehnte Anfrage?

Nichts. Ein abgelehnter GCRA-Aufruf lässt den Limiter unverändert, sodass ein Client, der es erneut versucht, nicht zusätzlich bestraft wird.

Verwandte Anwendungsfälle

Probieren Sie es mit Ihrer eigenen Workload

HotKV spricht das Redis-Protokoll, sodass Sie einen bestehenden Client darauf richten und genau diese Befehle ausführen können.