Skip to content

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

Notifications You must be signed in to change notification settings

IgorIvkin/openblocks-ratelimiter-golang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Инициатива OpenBlocks

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

Описание

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

Этот вариант сервиса основывается на оригинальной реализации на Java, но написан на языке программирования Go. Реализация на Go несколько быстрее стартует, потребляет меньше памяти и в целом является более легковесной.

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

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

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

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

limiters:
  basic:
    limit: 10
    unit: MINUTES
  test:
    limit: 5
    unit: SECONDS

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

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

API

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

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

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

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

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages