API Rate Limiting: троттлинг, квоты и защита от DDoS
API rate limiting предотвращает злоупотребление и перегрузку вашего API. Это руководство охватывает стратегии rate limiting, троттлинг, управление квотами и защиту от DDoS.
Обновлено:Что такое Rate Limiting?
Rate limiting — это ограничение количества запросов, которые могут быть сделаны за определённый период времени (секунда, минута, час).
Цели: предотвращение злоупотребления API, обеспечение справедливого использования, защита серверных ресурсов, снижение DDoS-атак.
При превышении rate limit: возвращается HTTP-статус 429 (Too Many Requests). Указывает, когда повторить, с помощью заголовка Retry-After.
Rate limiting повышает доступность и надёжность API. Обеспечивает соблюдение SLA (Service Level Agreement).
Алгоритмы Rate Limiting
Fixed Window: счётчик в фиксированном временном окне (например, 100 запросов в минуту). Просто, но проблема boundary (всплеск на границах окна).
Sliding Window Log: храните timestamp каждого запроса. Подсчитывайте запросы за последние N секунд. Точнее, но использует больше памяти.
Sliding Window Counter: гибрид fixed window и sliding window log. Меньше памяти, более точный результат.
Token Bucket: токены производятся с определённой скоростью. Каждый запрос потребляет один токен. Обеспечивает поддержку burst.
Leaky Bucket: запросы добавляются в очередь и обрабатываются с фиксированной скоростью. Обеспечивает smoothing трафика.
Стратегии Rate Limiting
На основе IP: лимит на основе IP-адреса запрашивающего. Просто, но пользователи за NAT (один IP) имеют проблемы.
На основе пользователя: лимит на основе аутентифицированного пользователя. Справедливее. Идентифицируйте пользователя с помощью API key или JWT.
На основе эндпоинта: разный лимит для каждого эндпоинта. /login (5/мин) vs /users (100/мин).
Tiered: разные лимиты для разных типов пользователей. Free (100/мин), Pro (1000/мин), Enterprise (10000/мин).
Global vs per-endpoint: глобальный лимит (для всего API) + лимит per-endpoint. Используйте оба вместе.
Реализация
Redis: храните счётчики rate limit в Redis. Атомарный счётчик с командами INCR и EXPIRE. Идеально для распределённого rate limiting.
Middleware: middleware Express.js (express-rate-limit), Django (django-ratelimit), Spring Boot (Bucket4j).
API Gateway: rate limiting с помощью Kong, AWS API Gateway, Cloudflare. Централизованное управление и мониторинг.
Response headers: возвращайте информацию о лимите с заголовками X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Client SDK: клиентские библиотеки читают информацию о rate limit и автоматически выполняют retry и backoff.
Защита от DDoS
Rate limiting сам по себе не обеспечивает защиту от DDoS. DDoS-атаки приходят в объёмах, превышающих rate limit.
Cloudflare: защита от DDoS, WAF (Web Application Firewall), управление ботами. Доступен бесплатный tier.
AWS Shield: защита от DDoS для сервисов AWS. Standard (бесплатный) и Advanced (платный).
Репутация IP: блокируйте IP с плохой репутацией. Используйте списки репутации, такие как Spamhaus, AbuseIPDB.
CAPTCHA: верифицируйте подозрительный трафик с помощью CAPTCHA. reCAPTCHA v3 (invisible) или hCaptcha.
Geo-blocking: блокируйте трафик из определённых стран (при необходимости).
Лучшие практики
Graceful degradation: давайте чёткое сообщение об ошибке пользователю при превышении rate limit. Указывайте, когда повторить, с помощью заголовка Retry-After.
Мониторинг: отслеживайте hit'ы rate limit. Аномальный рост может указывать на атаку или баг.
Whitelist: вносите доверенные IP (внутренние сервисы, API партнёров) в whitelist.
Документация: чётко указывайте политику rate limit в документации API. Информация о лимите, окне и retry.
Тестирование: тестируйте поведение rate limit с помощью load testing. Используйте k6, Artillery или JMeter.
Связанные инструменты
Пошаговые руководства
Практические статьи по теме
HTTP-кэширование и CDN: стратегии кэширования для веб-производительности
HTTP-кэширование и CDN (Content Delivery Network) dramatically улучшают веб-производительность.
Чеклист технического SEO: оптимизация сайта и индексация
Техническое SEO охватывает технические факторы, влияющие на способность поисковых систем сканировать, индексировать и ранжировать…