В общем, ограничитель скорости, как следует из самого названия, представляет собой систему, которая ограничивает скорость чего-либо. В случае ограничения скорости API этим что-то является не что иное, как запросы API.
Зачем иметь ограничитель скорости API на первом месте, верно? Давайте быстро рассмотрим его преимущества.
- Ограничитель скорости API защищает систему от возможной DoS-атаки. DoS означает отказ в обслуживании.
- Ограничив запросы API, сервер также будет защищен от перегрузки.
- В результате выполнения пункта 2 компания сэкономит средства, поскольку меньшее количество серверов сможет работать эффективно.
Давайте начнем с дизайна системы нашего ограничителя скорости API. Прежде всего, позвольте мне сказать вам, что мы будем разрабатывать нашу систему в базовой версии. Если вам нужно глубокое понимание и вы хотите изучить всестороннее проектирование системы, дайте мне знать в комментариях, и я поделюсь с вами ресурсами.
Итак, для начала давайте запишем параметры, которые будут играть роль в нашей системе.
- Клиент
- Ограничитель скорости API
- API-серверы
Общий дизайн системы нашего ограничителя скорости API будет выглядеть примерно так.
Давайте разработаем ограничитель скорости API. Итак, если вы попытаетесь мыслить технически, вы обнаружите, что ограничитель скорости API — это на самом деле очень простая вещь, но довольно мощная.
Для проверки ограничителя скорости API необходимо выполнить следующие шаги.
- Ограничитель скорости должен отслеживать количество клиентских запросов.
- Он должен проверить, превышает ли входящий запрос клиента лимит запросов, разрешенный для клиента.
- Необходимо сбросить количество клиентских запросов после предустановленной частоты, чтобы клиент снова сделал запрос.
Существует множество алгоритмов, которые ограничитель скорости API может использовать для решения вышеуказанных 3 пунктов. Я буду использовать алгоритм, известный как алгоритм корзины маркеров.
Этот алгоритм очень прост и интуитивно понятен. Как следует из названия, в этом алгоритме мы сохраняем корзину для каждого клиента и предварительно заполняем корзину некоторым набором токенов. Каждый раз, когда от клиента приходит запрос, мы проверяем корзину для этого клиента и проверяем, достаточно ли доступных токенов или нет. Если да, ограничитель скорости API перенаправит запрос клиента на соответствующий сервер, в противном случае запрос будет удален.
Одновременно мы также будем продолжать пополнять клиентские корзины с определенной заданной частотой, чтобы клиент мог снова отправлять запросы по истечении определенного времени. .
Я реализовал очень простой ограничитель скорости API, используя javascript. Если вы дошли до сюда, вы обнаружите, что в коде я пытался смоделировать точно такую же архитектуру, которую мы обсуждали сегодня. Пожалуйста, проверьте codesandbox один раз здесь https://codesandbox.io/embed/agitated-gwen-0hpjer?expanddevtools=1&fontsize=14&theme=dark
Это прекрасное обучение, не так ли?
Большое спасибо за то, что нашли время для себя, чтобы чему-то научиться. Я ценю ваше решение.
Я надеюсь, что статья принесла пользу вашему обучению. Если у вас есть какие-либо отзывы или комментарии, пожалуйста, поделитесь со мной в комментариях.
Спасибо!
Свяжитесь со мной.