API без ограничений — лёгкая мишень для перегрузки, ботов и злоупотреблений. Именно поэтому rate limiting и throttling считаются базовыми механизмами защиты, которые помогают сохранить доступность сервиса, контролировать нагрузку и защищать ресурсы backend.
Что такое Rate Limiting
Rate limiting — это ограничение числа запросов от клиента за определённый интервал времени.
Пример: не более 100 запросов в минуту для одного IP, токена или пользователя.
Зачем это нужно:
- защищает от DDoS и brute-force атак
- снижает риск перегрузки серверов
- помогает справедливо распределять ресурсы между клиентами
- ограничивает злоупотребление публичным API
Что такое Throttling
Throttling — это механизм замедления или управления скоростью обработки запросов. В отличие от жёсткого лимита, throttling не всегда блокирует запрос сразу: он может ставить его в очередь, искусственно задерживать ответ или снижать допустимую скорость при превышении порога.
Проще говоря:
- Rate limiting — “стоп, лимит превышен”
- Throttling — “работаем медленнее, чтобы система не упала”
Где применяют 🌐
- авторизация и логин-эндпоинты
- публичные REST и GraphQL API
- платёжные сервисы
- облачные платформы
- мобильные и веб-приложения с высокой нагрузкой
Популярные алгоритмы
- Fixed Window — простой подсчёт запросов в фиксированном окне времени
- Sliding Window — более точный контроль по “плавающему” интервалу
- Token Bucket — позволяет кратковременные всплески нагрузки
- Leaky Bucket — выравнивает поток запросов и стабилизирует систему
На практике часто выбирают Token Bucket: он хорошо подходит для API, где важен баланс между гибкостью и защитой.
Что важно настроить 🔐
- лимиты по IP, API key, user ID или JWT
- разные правила для guest, free и premium клиентов
- коды ответа: обычно 429 Too Many Requests
- заголовки X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After
- логирование, метрики и алерты по превышениям
Типичные ошибки
- один общий лимит для всех пользователей
- отсутствие исключений для доверенных сервисов
- слишком жёсткие ограничения, ломающие UX
- отсутствие распределённого хранилища лимитов в кластере
- игнорирование retry-логики на стороне клиента
Best practices 🚀
- комбинируйте rate limiting и throttling
- используйте Redis или API Gateway для централизованного контроля
- разделяйте лимиты по чувствительности эндпоинтов
- документируйте ограничения для разработчиков
- тестируйте поведение API под пиковыми нагрузками
Грамотно настроенные ограничения — это не просто защита API, а часть архитектуры надёжного сервиса. Они помогают выдерживать рост трафика, предотвращать инциденты и сохранять стабильную работу даже в условиях агрессивной нагрузки.
📚 Загляните в подборку каналов про IT — там ещё больше практики, архитектурных разборов и полезных материалов для разработчиков.