Skip to content

Ограничитель запросов в составе Open Blocks

Notifications You must be signed in to change notification settings

IgorIvkin/openblocks-ratelimiter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenBlocks "Ограничитель запросов"

Инициатива OpenBlocks

Инициатива OpenBlocks — это проект с открытым исходным кодом, целью которого является предоставить открытые и масштабируемые решения уровня предприятия.

Описание

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

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

Механизм распределенного ограничения доступа основывается на алгоритме Token bucket, по которому раз в единицу времени на ресурс выделяется некоторое заданное количество токенов доступа, а каждый запрос использует один токен. Если все токены исчерпались, это означает, что доступ к ресурсу ограничен до последующего выпуска новых токенов.

В дальнейшем для понятия "ограничитель ресурсов" также будет использоваться латинизированный термин "рейт-лимитер" (от англ. rate limiter — ограничитель частоты).

Основная конфигурация

Обратите внимание на следующие секции в конфигурации сервиса.

rate-limiter:
  limiters:
    basic:
      limit: 10
      unit: MINUTES
    test:
      limit: 5
      unit: SECONDS

В этом блоке заданы два рейт-лимитера, один с названием basic и с ограничением доступа 10 раз в минуту, другой — с названием test и с ограничением доступа 5 раз в секунду.

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

Основные сценарии развертывания

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

API

GET /api/v1/rate-limits/{limiterName}

Проверяет возможность обращения к ресурсу по ключу рейт-лимитера — limiterName. Например, для рейт-лимитера "basic" значение параметра будет равно "basic".

Возвращает true, если доступ возможен, и false, если доступ временно ограничен.

Полезные ссылки

About

Ограничитель запросов в составе Open Blocks

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages