Обычно используются два основных алгоритма:
Для большинства API Token Bucket предпочтительнее из-за гибкости при работе с реальными паттернами трафика.
Используй Redis как общее хранилище для всех серверов:
INCR и EXPIRE предотвращают race conditionsФормат ключа: rate_limit:{identifier}:{window}
Пример: rate_limit:user:123:1700000000
Определяй запросы по user ID, IP-адресу или API-ключу — в таком порядке приоритета. Каждый идентификатор соответствует определённому уровню:
Логика применения работает как middleware, перехватывая каждый запрос перед тем, как он попадёт в слой приложения.
Когда лимит превышен, верни:
429 Too Many RequestsX-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
Retry-After: 30
Это позволяет клиентам корректно отступить и повторить запрос с умом.
На нескольких серверах консистентность поддерживается:
Алгоритм Token Bucket предпочтителен для распределённого rate limiting, так как он естественным образом обрабатывает всплески трафика, одновременно соблюдая среднее ограничение частоты запросов.
Новый — ещё не проверен сообществом
Вы