Обучающий центр

Понимание Rate Limiting и 429 ошибок

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

Что такое Rate Limiting?

Rate Limiting (ограничение скорости) — это механизм защиты API, который контролирует количество запросов, которые пользователь или сервис может отправить за определенный промежуток времени.

Это не просто защита от DDoS-атак. Ограничение частоты помогает распределять нагрузку на серверы, защищает базу данных от перегрузки и обеспечивает справедливость использования ресурсов для всех клиентов API.

Когда лимит превышается, сервер принудительно прекращает обработку запроса и возвращает клиенту HTTP-код 429 Too Many Requests.

// Пример заголовков ответа
GET /api/v1/users/123

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
Retry-After: 60

{
"error": "rate_limit_exceeded",
"message": "Too many requests"
}

Как правильно отвечать на 429

Получение ошибки 429 не означает сбой сервера. Это сигнал: «Притормози». Игнорирование этого сигнала приведет к тому, что ваш IP-адрес может быть заблокирован на более долгий срок.

Читайте заголовки

Всегда проверяйте заголовок Retry-After. Он указывает серверное время в секундах, когда можно безопасно отправить следующий запрос.

Не спамьте повторно

Никогда не используйте мгновенный повтор (immediate retry) при ошибке 429. Это только усугубляет нагрузку и может привести к блокировке.

Логирование

Отслеживайте частоту возникновения 429. Если они появляются постоянно, возможно, лимиты API слишком малы для вашей бизнес-логики.

Стратегии Retries: Exponential Backoff

Золотой стандарт обработки временных ошибок — Exponential Backoff (экспоненциальная задержка). Вместо того чтобы повторять запрос сразу, ваш код ждет, удваивая время ожидания после каждой неудачной попытки.

  • Попытка 1: Ошибка 429. Ждем 1 секунду.
  • Попытка 2: Ошибка 429. Ждем 2 секунды.
  • Попытка 3: Ошибка 429. Ждем 4 секунды.
  • Попытка 4: Ошибка 429. Ждем 8 секунд.

Часто к этой формуле добавляют Jitter (случайную задержку), чтобы предотвратить "эффект молота" (Thundering Herd), когда тысячи клиентов одновременно пытаются отправить запрос после окончания таймера.

// Псевдокод на JS
async function fetchWithRetry(url, retries = 3) {
try {
const res = await fetch(url);
if (res.status === 429) {
const delay = Math.pow(2, retries) * 1000;
await sleep(delay);
return fetchWithRetry(url, retries - 1);
}
return res.json();
}
catch (e) { console.error(e); }
}
Серверная стойка с мигающими индикаторами статуса
Интеграция

Мониторинг с Statusly

Ошибки 429 могут быть признаком проблем в цепочке микросервисов. Если ваш внутренний сервис начинает "душить" запросы, это может привести к каскадному сбою всего приложения.

Statusly позволяет настроить мониторинг HTTP-кодов ответов. Вы можете создать правило, которое отправит уведомление в Slack или Telegram, если ваш API начнет возвращать 429 чаще 5 раз за минуту.

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

Как отличить 429 от 503 ошибки? +
Код 429 означает, что сервер работает, но вы нарушили лимиты частоты запросов. Код 503 (Service Unavailable) означает, что сервер перегружен и физически не может обработать запрос, даже если вы не превышали лимиты.
Можно ли увеличить Rate Limit? +
В коммерческих API это обычно возможно через смену тарифного плана. Для собственных микросервисов лимиты настраиваются в конфигурации балансировщика (Nginx, HAProxy) или в самом коде приложения.
Как Statusly помогает с 429? +
Statusly может мониторить ваши эндпоинты извне. Если вы настроите "умные алерты", система сообщит вам, если процент ошибок 429 резко вырастет, что часто предшествует полному падению сервиса.