В общем, ограничитель скорости, как следует из самого названия, представляет собой систему, которая ограничивает скорость чего-либо. В случае ограничения скорости API этим что-то является не что иное, как запросы API.

Зачем иметь ограничитель скорости API на первом месте, верно? Давайте быстро рассмотрим его преимущества.

  1. Ограничитель скорости API защищает систему от возможной DoS-атаки. DoS означает отказ в обслуживании.
  2. Ограничив запросы API, сервер также будет защищен от перегрузки.
  3. В результате выполнения пункта 2 компания сэкономит средства, поскольку меньшее количество серверов сможет работать эффективно.

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

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

  1. Клиент
  2. Ограничитель скорости API
  3. API-серверы

Общий дизайн системы нашего ограничителя скорости API будет выглядеть примерно так.

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

Для проверки ограничителя скорости API необходимо выполнить следующие шаги.

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

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

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

Я реализовал очень простой ограничитель скорости API, используя javascript. Если вы дошли до сюда, вы обнаружите, что в коде я пытался смоделировать точно такую ​​же архитектуру, которую мы обсуждали сегодня. Пожалуйста, проверьте codesandbox один раз здесь https://codesandbox.io/embed/agitated-gwen-0hpjer?expanddevtools=1&fontsize=14&theme=dark

Это прекрасное обучение, не так ли?

Большое спасибо за то, что нашли время для себя, чтобы чему-то научиться. Я ценю ваше решение.

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

Спасибо!

Свяжитесь со мной.

Портфолио
LinkedIn

Электронная почта
Twitter
Github