Datos básicosAPI

Limitación de tasa

Límites de tasa atómicos en el servidor. GCRA en un comando, o limitadores con nombre con ventana deslizante, token bucket o leaky bucket. Sin Lua.

comando atómico por solicitud
1
algoritmos
4
scripts de Lua
0
Paso 1 de 5
Permitida

10 solicitudes por minuto para el usuario 42. La respuesta indica que está permitida, el límite y cuántas quedan.

Sesión de ejemploplaying
# Permitida
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

Un recorrido animado con comandos reales de HotKV y respuestas de ejemplo. Haz clic en cualquier paso para saltar a él. Los comandos y las respuestas se quedan en inglés, tal como los escribes y los ves en HotKV.

El problema

A una API sin límites le basta un cliente que se porte mal para caerse. Hacer la comprobación en el código de la aplicación implica una lectura, un cálculo y una escritura, y las solicitudes concurrentes se cuelan por los huecos entre ellos. Muchos equipos acaban manteniendo un script de Lua solo para hacerlo atómico.

Cómo lo resuelve HotKV

GCRA.LIMIT decide y registra en un solo paso, así que dos clientes concurrentes no pueden pasar con el mismo estado, y el límite se recarga de forma suave en lugar de reiniciarse en los bordes de la ventana. Para los límites que gestionas por nombre, RATELIMIT.CREATE configura un limitador de ventana deslizante, token bucket o leaky bucket con estadísticas de lo que permitió y denegó.

Paso a paso

Qué ocurre, comando a comando

  1. 01

    Permitida

    10 solicitudes por minuto para el usuario 42. La respuesta indica que está permitida, el límite y cuántas quedan.

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

    Una ráfaga de un bot

    El scraper agota su margen de ráfaga y luego se le dice cuánto debe esperar. Una solicitud denegada no cambia nada.

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

    Limitador con nombre para un plan

    Los clientes del plan gratuito tienen 100 solicitudes por minuto en una ventana deslizante.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Solicitud ponderada

    Un endpoint de exportación cuesta 20 unidades, así que consume más del margen.

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

    Mira lo que hizo el limitador

    Configuración, claves seguidas y los totales de solicitudes permitidas y denegadas.

    RATELIMIT.STATS free_plan
Dónde encaja

Escenarios reales

API públicas

Cada clave de API recibe un límite por plan, con ráfagas para los clientes que se portan bien y un Retry-After preciso para el resto.

Formularios de inicio de sesión y registro

Los intentos por IP y por cuenta se limitan para frenar el credential stuffing.

Llamadas salientes

Las llamadas a la API de un socio o a un proveedor de LLM se mantienen por debajo de su cuota en todos los workers de la flota.

Integrado

Qué obtienes

GCRA en un comando

Recarga suave con ráfagas, comprobación y actualización atómicas y un tiempo de reintento al denegar.

GCRA.LIMITGCRA.RESET

Limitadores con nombre

Ventana deslizante, token bucket o leaky bucket, creados una vez y comprobados por clave.

RATELIMIT.CREATERATELIMIT.CHECK

Solicitudes ponderadas

Las llamadas caras pueden contar como varias solicitudes. GCRA.LIMIT acepta un recuento, RATELIMIT.CHECK un COST.

COST

Estadísticas

Totales de permitidas y denegadas por limitador.

RATELIMIT.STATS

Preguntas frecuentes

¿Necesito un script de Lua para limitar la tasa?

No. Tanto GCRA.LIMIT como RATELIMIT.CHECK hacen toda la comprobación como un único comando atómico.

¿Cuál debo usar?

GCRA.LIMIT no necesita configuración y funciona en todos los planes. Los limitadores con nombre RATELIMIT.* añaden la elección de algoritmo y estadísticas, y forman parte de los planes Performance y Scale.

¿Cuánto cuesta una solicitud denegada?

Nada. Una llamada GCRA denegada deja el limitador sin cambios, así que un cliente que reintenta no sale más penalizado.

Casos de uso relacionados

Pruébalo con tu propia carga de trabajo

HotKV habla el protocolo de Redis, así que puedes apuntar un cliente que ya usas hacia él y ejecutar estos mismos comandos.