Sobes.tech
Назад к вопросам
Junior — Middle
74

Каким образом реализуется механизм ограничения количества запросов в единицу времени в системе?

Компании, где спрашивали
Startribe

Ответ от нейросети

sobes.tech AI

Механизм ограничения количества запросов в единицу времени (rate limiting) в Go часто реализуется с помощью токен-бакетов или счетчиков с временным окном.

Пример с использованием пакета golang.org/x/time/rate:

import (
    "golang.org/x/time/rate"
    "net/http"
)

var limiter = rate.NewLimiter(1, 5) // 1 запрос в секунду с максимальным запасом 5 токенов

func handler(w http.ResponseWriter, r *http.Request) {
    if !limiter.Allow() {
        http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
        return
    }
    // обработка запроса
}

Здесь rate.NewLimiter создаёт лимитер, который разрешает 1 запрос в секунду, но может аккумулировать до 5 токенов, позволяя кратковременный всплеск запросов. Если запросов слишком много, они отклоняются с ошибкой 429.

Другие подходы — фиксированное окно (fixed window), скользящее окно (sliding window) или использование Redis для распределённого лимитирования.