Rate limiting — ограничение скорости запросов в определенной системе. К примеру вы можете поставить ограничения на ваш веб сервер — не более 10 запросов в секунду. Возможно создание ограничения только для определенного клиента или типа машины.
В Golang добавление rate limit довольно просто, достаточно использовать готовую библиотеку golang.org/x/time/rate
Как пример — я хочу получать не более 10 запросов в секунду с первоначальным burst (довольно сложно перевести на русский, что-то типа вспышки или очереди запросов) в 100:
package main import ( "context" "fmt" "time" "golang.org/x/time/rate" ) func main() { limit := 10 burst := 100 limiter := rate.NewLimiter(rate.Limit(limit), burst) ctx := context.Background() i := 0 for { fmt.Println("Do smth...", time.Now()) limiter.Wait(ctx) fmt.Println(i, " - ", time.Now()) i++ } }
Итого, при запуске я получу 100 Do smth.. немедленно и далее следующие запросы будут идти пачками по 10 штук в секунду.
Мы также можем сбросить burst или изменить это значение во время исполнения программы.