Основные данныеAPI

Ограничение частоты запросов

Атомарные ограничения на стороне сервера. GCRA одной командой или именованные ограничители со скользящим окном, token bucket или leaky bucket. Lua не нужен.

атомарная команда на запрос
1
алгоритма
4
скриптов Lua
0
Шаг 1 из 5
Разрешено

10 запросов в минуту для пользователя 42. Ответ сообщает, разрешено ли, лимит и сколько осталось.

Пример сеансаplaying
# Разрешено
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

Анимированная демонстрация с настоящими командами HotKV и примерами ответов. Нажмите на любой шаг, чтобы перейти к нему. Команды и ответы остаются на английском, ровно так, как вы вводите и видите их в HotKV.

Проблема

API без ограничений в одном шаге от сбоя из-за одного неправильно ведущего себя клиента. Проверка в коде приложения означает чтение, вычисление и запись, и параллельные запросы проскальзывают между ними. Многим командам в итоге приходится поддерживать скрипт Lua только ради атомарности.

Как с этим справляется HotKV

GCRA.LIMIT принимает решение и записывает его за один шаг, поэтому параллельные клиенты не могут оба пройти по одному состоянию, а лимит восстанавливается плавно, а не сбрасывается на границах окон. Для лимитов, которыми вы управляете по имени, RATELIMIT.CREATE создаёт ограничитель со скользящим окном, token bucket или leaky bucket со статистикой разрешённого и отклонённого.

Шаг за шагом

Что происходит, команда за командой

  1. 01

    Разрешено

    10 запросов в минуту для пользователя 42. Ответ сообщает, разрешено ли, лимит и сколько осталось.

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

    Всплеск от бота

    Скрапер исчерпывает допустимый всплеск, и ему сообщают, сколько ждать. Отклонённый запрос ничего не меняет.

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

    Именованный ограничитель для тарифа

    Клиенты бесплатного тарифа получают 100 запросов в минуту на скользящем окне.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Запрос с весом

    Конечная точка экспорта стоит 20 единиц, поэтому расходует больше лимита.

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

    Смотрим, что сделал ограничитель

    Настройки, отслеживаемые ключи и итоги разрешённых и отклонённых запросов.

    RATELIMIT.STATS free_plan
Где это уместно

Реальные сценарии

Публичные API

Каждый ключ API получает лимит по тарифу, со всплесками для добросовестных клиентов и точным Retry-After для остальных.

Формы входа и регистрации

Попытки на IP и на аккаунт ограничиваются, чтобы замедлить подбор учётных данных.

Исходящие вызовы

Вызовы API партнёра или провайдера LLM удерживаются в пределах их квоты на всех воркерах парка.

Встроено

Что вы получаете

GCRA одной командой

Плавное восстановление со всплесками, атомарная проверка и обновление, время повтора при отказе.

GCRA.LIMITGCRA.RESET

Именованные ограничители

Скользящее окно, token bucket или leaky bucket, создаются один раз и проверяются по ключу.

RATELIMIT.CREATERATELIMIT.CHECK

Запросы с весом

Дорогие вызовы могут считаться несколькими запросами. GCRA.LIMIT принимает количество, RATELIMIT.CHECK - COST.

COST

Статистика

Итоги разрешённых и отклонённых запросов по каждому ограничителю.

RATELIMIT.STATS

Частые вопросы

Нужен ли скрипт Lua для ограничения частоты?

Нет. И GCRA.LIMIT, и RATELIMIT.CHECK выполняют всю проверку как одну атомарную команду.

Что выбрать?

GCRA.LIMIT не требует настройки и работает на любом тарифе. Именованные ограничители RATELIMIT.* добавляют выбор алгоритма и статистику и входят в тарифы Performance и Scale.

Чего стоит отклонённый запрос?

Ничего. Отклонённый вызов GCRA оставляет ограничитель без изменений, поэтому клиент, который повторяет попытку, не наказывается дополнительно.

Связанные сценарии

Попробуйте на своей нагрузке

HotKV понимает протокол Redis, поэтому вы можете подключить к нему существующий клиент и выполнить те же команды.