Алгоритмы
- Fixed window — N запросов за фиксированный интервал (например, 100 в минуту). Прост, но уязвим к пиковым атакам на границах окон
- Sliding window — скользящее окно, более равномерное распределение
- Token bucket — клиент получает «жетоны» с фиксированной скоростью и тратит по одному на запрос. Допускает короткие burst-ы
- Leaky bucket — запросы обрабатываются равномерно, независимо от burst-ов
Реализация
Храните счётчики в Redis — он поддерживает атомарный инкремент и TTL. HTTP-ответ при превышении лимита: 429 Too Many Requests с заголовком Retry-After.