Открыть сервис

Ограничение скорости передачи

Ограничение скорости передачи (также известно как рейтлимитинг, от англ. rate limiting) — это метод управления трафиком, применяемый в компьютерных сетях, веб-сервисах, телекоммуникационных системах и базах данных, который искусственно ограничивает количество операций (запросов, пакетов данных, транзакций) за определённый интервал времени. Основная цель рейтлимитинга — предотвращение перегрузки системы, обеспечение равномерного доступа к ресурсам, защита от злонамеренных действий (например, DDoS-атак, перебора паролей) и соблюдение условий лицензирования или соглашений об уровне обслуживания (SLA).

Принцип работы

Механизм ограничения скорости основан на отслеживании интенсивности событий и принятии решения о пропуске или блокировке (отклонении) последующих запросов при превышении заданного порога. Фундаментальным понятием является «окно» — временной интервал, в течение которого подсчитывается количество попыток.

Ключевые параметры

Когда число операций за текущее окно достигает лимита, последующие операции либо отклоняются (например, с HTTP-кодом 429 «Too Many Requests»), либо ставятся в очередь, либо обрабатываются с задержкой.

Алгоритмы реализации

Существует несколько классических алгоритмов, каждый со своими особенностями точности и производительности.

Алгоритм «счётчика в фиксированном окне»

Простейший подход: для каждого ключа (например, IP-адреса) ведётся счётчик, который сбрасывается в начале каждого окна (например, в каждую новую минуту). Ограничение легко реализовать на уровне оперативной памяти с помощью хеш-таблиц. Недостаток — «потолочный эффект» (англ. burst at boundary): в самом конце окна и в начале следующего может произойти двойной всплеск нагрузки (до 2x лимита за короткий отрезок времени).

Алгоритм «скользящего окна» (Sliding Window)

Более точный подход, при котором учитывается не фиксированная календарная единица, а скользящий интервал. Обычно реализуется в виде скользящего окна журнала (лога) или скользящего счётчика. В первом случае хранится метка времени каждого запроса, и лимит проверяется по количеству записей за последние N секунд. Во втором — используется два счётчика (текущий и предыдущий) для аппроксимации точного значения. Этот алгоритм избегает резких скачков нагрузки на границе окон.

Алгоритм «дырявого ведра»

Моделирует работу ведра с отверстием: запросы поступают сверху, а «выходят» снизу с постоянной скоростью. Если ведро переполняется (новые запросы приходят быстрее, чем успевают «вытекать»), лишние запросы отбрасываются. Фактически, это не просто счётчик пиковой нагрузки, а регулятор средней скорости и частоты перестроения трафика. Широко применяется в телекоммуникациях для управления синхронизацией кадров.

Алгоритм «ведра токенов»

Популярный в сетевом оборудовании и API-шлюзах. Ведро заполняется «токенами» с постоянной скоростью (например, 10 токенов в секунду), но имеет максимальную ёмкость (например, 100 токенов). Каждый запрос потребляет один токен. Если токенов нет — запрос отклоняется или ожидает. Позволяет пропускать кратковременные всплески трафика (так как токены могут накапливаться), но ограничивает среднюю скорость.

Области применения

Веб-сервисы и API

Практически все публичные API (например, VK API, Яндекс.Карты, API социальных сетей) применяют ограничение скорости. Это защищает бэкенд от случайного или злонамеренного перегруза одним клиентом. Типичные настройки: 100 запросов в минуту для бесплатного тарифа, 1000 — для платного. При превышении клиент получает ответ с кодом 429 Too Many Requests и заголовками, указывающими лимит и время сброса (например, X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After).

Защита от атак

Контроль доступа к базам данных

Системы управления базами данных (например, PostgreSQL, MySQL, MongoDB) могут ограничивать количество одновременных соединений или запросов в секунду для отдельного пользователя или приложения, чтобы «шумный сосед» не занял все ресурсы кластера.

Телекоммуникации

В сетях с коммутацией пакетов (IP-телефония, LTE) алгоритмы ограничения скорости используются для реализации классов обслуживания (QoS, Flyku). Например, для видеозвонков гарантируется 2 Мбит/с, а остальной трафик одного абонента — ограничивается.

Реализация на практике

Серверная сторона

Клиентская сторона

При разработке приложений или скриптов, которые вызывают API с лимитами, применяется стратегия «экспоненциальной задержки» (exponential backoff) и автоматического повторения запроса после получения кода 429.

Критика и ограничения

Примеры в российской практике

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →