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


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



Когда тысячи пользователей совместно используют услугу, ограничение скорости помогает системе быть доступной для всех ее клиентов. Ограничение скорости также защищает систему от атак типа "отказ в обслуживании" (DoS). При DoS-атаке злоумышленник может инициировать огромное количество запросов на обслуживание за короткий период. Это приводит к исчерпанию ресурсов. Это означает, что система становится недоступной для законных пользователей. В некоторых случаях веб-служба, API или другой ресурс могут получать многочисленные запросы из-за ошибки на стороне клиента или пользователя. Ограничение - это практический подход, который организации используют, чтобы избежать таких сценариев.

Ограничения на обмен сообщениями в социальных сетях - типичный пример ограничения скорости, с которым сталкивается большинство пользователей Интернета. Сайты социальных сетей, такие как Facebook, VK или Instagram, часто ограничивают количество прямых сообщений, которые пользователи могут отправлять в день. Например, если пользователь решает переслать сообщение тысячам контактов, включается логика ограничения скорости в службе социальных сетей. Это может заблокировать отправку пользователем каких-либо дополнительных сообщений на определенный период.

Почему необходимы лимиты?

В цифровую эпоху организации предоставляют большую часть своих услуг через API. Эти сервисы на основе API позволяют организациям иметь большой контроль над своими системами. Но размещение этих API и серверной базы данных накладывает нагрузку на их ресурсы. Организации должны использовать ограничение скорости, чтобы обеспечить справедливое использование своих API и предотвратить истощение ресурсов некоторыми пользователями. Когда API становится популярным, число пользователей быстро растет. В таких сценариях организациям необходимо убедиться, что все их услуги доступны и не перегружены. Лимиты также помогают организациям обеспечивать безопасность, управлять и монетизировать свои услуги.

Каковы основные виды ограничений?

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

Ограничение скорости на уровне пользователя

В тех случаях, когда система может однозначно идентифицировать пользователя, она может ограничить количество запросов API, которые пользователь делает за определенный период времени. Например, если пользователю разрешено делать только два запроса в секунду, система отклоняет третий запрос пользователя, сделанный в ту же секунду. Ограничение скорости на уровне пользователя обеспечивает справедливое использование. Однако ведение статистики использования каждого пользователя может создать дополнительные затраты для системы, которые, если не потребуются по другим причинам, могут привести к утечке ресурсов.

Ограничение скорости на уровне сервера

Большинство сервисов, основанных на API, распределены по своей природе. Это означает, что когда пользователь отправляет запрос, он может обслуживаться любым из множества серверов. В распределенных системах ограничение скорости может использоваться для распределения нагрузки между серверами. Например, если один сервер получает большой объем запросов из десяти серверов в распределенной системе, а другие в основном простаивают, система используется не полностью.

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

Ограничение скорости на основе географии

Большинство сервисов, основанных на API, имеют серверы, разбросанные по всему миру. Когда пользователь отправляет запрос API, сервер, близкий к географическому местоположению пользователя, выполняет его. Организации внедряют ограничение скорости на основе географии, чтобы ограничить количество запросов на обслуживание из определенной географической области. Это также может быть сделано в зависимости от времени.

Например, если количество запросов, поступающих из определенного географического местоположения, невелико с 1:00 до 6:00, то веб-сервер может иметь правило ограничения скорости для этого конкретного периода. Если в эти часы произойдет атака на сервер, количество запросов резко возрастет. В случае всплеска механизм ограничения скорости затем запустит оповещение, и организация сможет быстро отреагировать на такую атаку.

Какие алгоритмы используются для ограничения скорости?

Фиксированное ограничение скорости окна

Фиксированное ограничение скорости окна ограничивает количество запросов API в определенное время. Например, сервер может иметь компонент ограничения скорости, реализующий алгоритм фиксированного окна, который принимает только 100 запросов в минуту. Временные рамки фиксированы, и они начинаются в определенное время.

Например, сервер будет обслуживать только 100 запросов в период с 10:00 до 10:01 утра. В 10:01 утра окно сбрасывается. Алгоритмы фиксированного окна могут быть реализованы на уровне пользователя или сервера. Если это реализовано на уровне пользователя, то каждый пользователь может делать 100 запросов в минуту. Если это серверный уровень, то все пользователи могут коллективно выполнять 100 запросов в минуту.

Преимущества и недостатки алгоритма фиксированного окна

Алгоритм фиксированного окна легко реализовать, так как он основан на фиксированных временных рамках. Поскольку количество запросов обновляется в начале каждого временного интервала, алгоритм фиксированного окна не вызывает нехватки новых запросов. С другой стороны, недостатком алгоритма с фиксированным окном является то, что он приводит к потоку запросов, особенно в начале временного окна. Например, если сервер разрешает 1000 запросов в секунду, все эти 1000 запросов могут выполняться одновременно, потенциально перегружая сервер. Эта проблема может возникнуть из-за отсутствия ограничений на минимальный промежуток времени между двумя запросами.

Ограничение скорости текущим ведром

В отличие от алгоритма с фиксированным окном, алгоритм "дырявого ведра" не зависит от временных окон. Вместо этого у него есть очередь фиксированной длины, которая не зависит от времени. Веб-сервер обслуживает запрос в порядке живой очереди. Каждый новый запрос добавляется в конец очереди. Если при поступлении нового запроса очередь заполняется, сервер отбрасывает запрос.

Преимущества и недостатки алгоритма "Дырявое ведро"

Одним из основных преимуществ алгоритма "дырявого ведра" является то, что, поскольку он основан на очереди, его легко реализовать. Кроме того, он представляет запросы API на сервер с постоянной скоростью. В отличие от алгоритма фиксированного окна, в любое конкретное время не будет всплеска количества запросов. Однако, поскольку алгоритм "дырявого ведра" основан на статической очереди, существует вероятность голодания, а это означает, что новые запросы могут вообще не обслуживаться. Эта проблема отсутствует в фиксированном окне, так как временное окно периодически обновляется для приема новых запросов.

Алгоритм ограничения скорости скользящего окна

Алгоритм скользящего окна очень похож на алгоритм фиксированного окна, за исключением начальной точки временного окна. В скользящем окне временное окно начинается только при подаче нового запроса. Например, если первый запрос сделан в 10:02 утра, и сервер разрешает два запроса в минуту, временные рамки составляют с 10:02 до 10:03 утра.

Алгоритм скользящего окна эффективно решает проблемы с пакетами запросов, с которыми сталкивается алгоритм фиксированного окна. Это также решает проблему голода, с которой сталкиваются алгоритмы "дырявого ведра".
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, интернет, информационная безопасность, сети




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Онлайн разблокировка Folder Guard
Law of Demeter (Закон Деметры, LOD) с примером на PHP
Рецензия на Лес повешенных лисиц от Арто Паасилинна