Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию.

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

Ограничение скорости — это один из методов, который вы можете использовать для управления трафиком в вашем приложении или сети.

Что такое ограничение скорости?

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

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

instagram viewer

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

ставка package является частью проекта Go, но он недоступен в стандартной библиотеке. Вам необходимо установить пакет с получать команда.

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

идти получить "golang.org/x/time/rate"

Импортируйте эти пакеты в файл Go для этого руководства.

Импортировать (
"кодировка/json"
"golang.org/x/time/rate"
"бревно"
"сеть/http"
)

json package предназначен для кодирования структуры как JSON для клиента. Вы будете использовать бревно пакет в бревно ошибки в консоль и http package для создания конечной точки и промежуточного программного обеспечения и запуска сервера.

Создание простого API с одной конечной точкой

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

Вот модель структуры со строковыми полями, которые вы будете кодировать для клиента.

тип Сообщение структура {
Ответ нить`json:"ответ"`
Описание нить`json:"описание"`
}

Функция обработчика установит тип содержимого в JSON, запишет успешный код состояния и вернет клиенту закодированный экземпляр структуры.

функцияконечная точкаПример(писатель http. ResponseWriter, запрос *http. Запрос) {
писатель. Заголовок().Set("Тип контента", "приложение/json")
писатель. Заголовок записи (http. СтатусОК)
сообщение := Сообщение{
Ответ: «Успешно»,
Описание: «Вы успешно достигли конечной точки API»,
}
ошибка := json. NewEncoder (запись).Encode(&сообщение)
если ошибся != ноль {
возвращаться
}
}

конечная точкаПример функция-обработчик принимает http упаковка писатель и запрос экземпляр метода и возвращает сообщение клиенту с писатель пример.

Ограничение скорости приложения Simple Go

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

Вот как вы можете создать ограничитель скорости и авторизовать пользователей на основе количества запросов.

функцияrateLimiterПромежуточное ПО(следующий функция(писатель http. ResponseWriter, запрос *http. Запрос)) http.HandlerFunc {
ограничитель := скорость. НовыйОграничитель(3, 6) // максимум 6 запросов, а затем еще три запроса в секунду
возвращаться http. HandlerFunc(функция(писатель http. ResponseWriter, запрос *http. Запрос) {
если !ограничитель. Позволять() {
писатель. Писать([]байт("ограничение скорости превышено "))
возвращаться
} еще {
endpointExample (запись, запрос)
}
})
}

rateLimiterПромежуточное ПО функция-обработчик — промежуточное ПО, принимающее в качестве аргумента функцию-обработчик и возвращающее результат авторизации после создания нового ограничителя скорости с параметром НовыйLimiter метод, который принимает два параметра для количества запросов в секунду после указанного максимального количества запросов.

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

функцияосновной() {
http. HandleFunc("/home", rateLimiterMiddleware (endpointExample))
ошибка := http. Прослушать И Обслужить(":8080", ноль)
если ошибся != ноль {
бревно. Println("Произошла ошибка прослушивания порта:8080", ошибся)
}
}

основной функция монтирует /home конечная точка к rateLimiterПромежуточное ПО функция-обработчик, которая принимает конечная точкаПример функция обработчика.

слушать и обслуживать метод запускает сервер на локальном порту 8080 и возвращает возможные ошибки.

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

для я в {1..10}; делать завиток http://localhost: 8080/дом; сделанный

Код попадает в /home конечная точка десять раз с запросом. Вот результат запросов.

После шестого запроса (максимум) клиент неавторизован и больше не может получить доступ к конечной точке.

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

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